为了账号安全,请及时绑定邮箱和手机立即绑定

在 Gorilla Mux 中嵌套子路由器

在 Gorilla Mux 中嵌套子路由器

Go
慕标5832272 2021-09-27 20:42:14
我一直在使用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)

查看完整回答
反对 回复 2021-09-27
?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

我想通了,所以我会把它贴在这里,以防有人像我一样愚蠢。:D

创建基于路径的子路由器时,您必须使用PathPrefix而不是Path.

r.PathPrefix("/api").Subrouter()

使用r.Path("/api")仅安装处理器到端点时。


查看完整回答
反对 回复 2021-09-27
?
慕容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 应用中间件


查看完整回答
反对 回复 2021-09-27
  • 3 回答
  • 0 关注
  • 268 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信