我有一个带有CRUD操作的简单Web应用程序,我想使用相同的端口地址和不同的Handle模式来提供网页和API路由。如下,
fs := http.FileServer(http.Dir("server/webapps/play_maths")) http.Handle("/", fs) http.Handle("/api", call API routes)
以下是我的API路线
func UserRoutes() *mux.Router { var router = mux.NewRouter() router = mux.NewRouter().StrictSlash(true) router.HandleFunc("/user/create", api.CreateUser) router.HandleFunc("/user/get/all", api.GetAllUsers) return router }
net/http开箱即用的软件包支持此功能。引用自http.ServeMux:
net/http
http.ServeMux
模式命名固定的,有根的路径(例如“ /favicon.ico”)或有根的子树(例如“ / images /”)(请注意结尾的斜杠)。 较长的模式优先于较短的模式 ,因此,如果同时为“ / images /”和“ / images / thumbnails /”注册了处理程序,则将为以“ / images / thumbnails /”开头的路径调用后一个处理程序将在“ / images /”子树中接收对任何其他路径的请求。
因此,只需将文件处理程序注册到path /,然后将API处理程序注册到例如/api/path即可。在这种情况下,任何以开头的请求/api/都将定向到API处理程序,而其他任何请求都将定向到文件处理程序。
/
/api/
请注意,这当然意味着如果文件/api/夹中有文件(或更具体地说,其请求路径以开头/api/),则由于上述原因,将无法访问这些文件。