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

在 Gorilla / Mux 中反转子路由器

在 Gorilla / Mux 中反转子路由器

Go
狐的传说 2021-09-13 10:34:11
我想获取命名子路由的路径,但我下面的代码不起作用。当我尝试在非子路由上使用相同的逻辑时,它工作正常。如何获取命名子路由的路径?router = mux.NewRouter() // this is a global variablehome := router.Path("/home").Subrouter()home.Methods("GET").HandlerFunc(c.GetHomeHandler).Name("home")home.Methods("POST").HandlerFunc(c.PostHomeHandler)p, err := router.Get("home").URL()if (err != nil) { panic (err) }log.Printf(p.Path)上面给出了这个错误:panic: mux: route doesn't have a host or path现在如果我这样做了 router.HandleFunc("/home", c.GetHomeHandler).Name("home"),它工作得很好。感谢你的帮助。更新:这是一个合理的解决方法,但它避免了创建子路由。对于我上面的示例来说很好,但可能并不理想,因为您将无法获得 Subroute 的所有好处。router.Path("/home").Methods("GET").HandlerFunc(c.GetHomeHandler).Name("home")router.Path("/home").Methods("POST").HandlerFunc(c.PostHomeHandler)
查看完整描述

1 回答

?
烙印99

TA贡献1829条经验 获得超13个赞

我相信你需要用 PathPrefix 指定你的子路由,然后为了支持 /home 和 /home/ 启用 StrictSlash (由于这个问题)


router := mux.NewRouter() 

home := router.PathPrefix("/home").Subrouter().StrictSlash(true)

home.Path("/").Methods("GET").HandlerFunc(GetHomeHandler).Name("home")

home.Path("/post/").Methods("POST").HandlerFunc(PostHomeHandler).Name("home-post")



p, err := router.Get("home").URL()

if (err != nil) { panic (err) }

log.Printf(p.Path)


p, err = home.Get("home-post").URL()

if (err != nil) { panic (err) }

log.Printf(p.Path)


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

添加回答

举报

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