一尘不染

如何通过使用相同的端口地址和不同的句柄模式来服务网页和API路由

go

我有一个带有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
}

阅读 284

收藏
2020-07-02

共1个答案

一尘不染

net/http开箱即用的软件包支持此功能。引用自http.ServeMux

模式命名固定的,有根的路径(例如“ /favicon.ico”)或有根的子树(例如“ / images /”)(请注意结尾的斜杠)。
较长的模式优先于较短的模式 ,因此,如果同时为“ / images /”和“ / images / thumbnails
/”注册了处理程序,则将为以“ / images / thumbnails /”开头的路径调用后一个处理程序将在“ / images
/”子树中接收对任何其他路径的请求。

因此,只需将文件处理程序注册到path
/,然后将API处理程序注册到例如/api/path即可。在这种情况下,任何以开头的请求/api/都将定向到API处理程序,而其他任何请求都将定向到文件处理程序。

请注意,这当然意味着如果文件/api/夹中有文件(或更具体地说,其请求路径以开头/api/),则由于上述原因,将无法访问这些文件。

2020-07-02