我一直在使用gorilla/mux我的路由需求。但是我注意到一个问题,当我嵌套多个子路由器时它不起作用。这是示例:func main() { r := mux.NewRouter().StrictSlash(true) api := r.Path("/api").Subrouter() u := api.Path("/user").Subrouter() u.Methods("GET").HandleFunc(UserHandler) http.ListenAndServe(":8080", r)}我想使用这种方法,所以我可以将填充路由器委托给其他一些包,例如 user.Populate(api)但是,这似乎不起作用。仅当我在链中使用单个子路由器时才有效。有任何想法吗?
3 回答
至尊宝的传说
TA贡献1789条经验 获得超10个赞
如果您需要分离 UI 和 API 路由器,您可以简单地执行 :
appRouter := r.PathPrefix("/").Subrouter()
appRouter.Use(myAppRouter)
apiRouter := r.PathPrefix("/api").Subrouter()
apiRouter.Use(myAPIRouter)
米琪卡哇伊
TA贡献1998条经验 获得超6个赞
我想通了,所以我会把它贴在这里,以防有人像我一样愚蠢。:D
创建基于路径的子路由器时,您必须使用PathPrefix
而不是Path
.
r.PathPrefix("/api").Subrouter()
使用r.Path("/api")
仅安装处理器到端点时。
慕容3067478
TA贡献1773条经验 获得超3个赞
对于那些在 auth 和 noauth 路由之间挣扎的人来说,以下对我来说很好用:
r := mux.NewRouter()
noAuthRouter := r.MatcherFunc(func(r *http.Request, rm *mux.RouteMatch) bool {
return r.Header.Get("Authorization") == ""
}).Subrouter()
authRouter := r.MatcherFunc(func(r *http.Request, rm *mux.RouteMatch) bool {
return true
}).Subrouter()
然后你可以只为 authRouter 应用中间件
- 3 回答
- 0 关注
- 268 浏览
添加回答
举报
0/150
提交
取消