英文:
Can't we include vars in gorilla subrouter pathprefix?
问题
我正在尝试将子路由添加到我的路由器代码中:
router := mux.NewRouter()
baseRouter := router.PathPrefix("/api/v1").Subrouter()
managementRouter := baseRouter.PathPrefix("/managing/{id}").Subrouter()
managementRouter.Use(auth.ManagingMiddleware)
managementRouter.HandleFunc("/add-employees", management.AddEmployeesToOrganization).Methods("POST")
目标是强制客户端在每次调用managementRouter
函数时提供一个id
变量。
然而,当我发送这样的请求时:
/api/v1/managing/627e6f7e05db3552970e1164/add-employees
...我得到一个404错误。我是否遗漏了什么,或者这根本不可能实现?
英文:
I'm trying to add a subrouter to my router code :
router := mux.NewRouter()
baseRouter := router.PathPrefix("/api/v1").Subrouter()
managementRouter := baseRouter.PathPrefix("/managing/{id}").Subrouter()
managementRouter.Use(auth.ManagingMiddleware)
managementRouter.HandleFunc("/add-employees", management.AddEmployeesToOrganization).Methods("POST")
The goal is to force the client to give an id
variable on each call to managementRouter
functions.
Although, when i send a request like this :
/api/v1/managing/627e6f7e05db3552970e1164/add-employees
... I get a 404. Am I missing something or is it just not possible ?
答案1
得分: 0
好的,以下是翻译好的内容:
好的,所以昨晚我在梦中找到了一个解决方案,哈哈
基本上,以下前缀的问题是:
managementRouter := baseRouter.PathPrefix("/managing/{id}").Subrouter()
问题在于路由器无法知道id
字段的结束位置。因此,当我们访问一个端点时,例如这个URL:/api/v1/managing/627e6f7e05db3552970e1164/add-employees
,路由器会认为{id}
变量实际上是627e6f7e05db3552970e1164/add-employees
,并且不匹配之后的任何路由。
所以我找到的解决方案是告诉路由器变量之后的内容。为此,你只需在变量后面添加一个斜杠:
managementRouter := baseRouter.PathPrefix("/managing/{id}/").Subrouter()
英文:
Ok so I found a solution in my dream last night haha
Basically the problem with the following prefix :
managementRouter := baseRouter.PathPrefix("/managing/{id}").Subrouter()
Is that the router has no way of knowing where the id
field stops. So when we access an endpoint with for example this url : /api/v1/managing/627e6f7e05db3552970e1164/add-employees
, the router believes that the {id}
variable is literally 627e6f7e05db3552970e1164/add-employees
and doesn't match any route after it.
So the solution I found is to tell the router what comes after the variable. For that, you just add a slash after the variable :
managementRouter := baseRouter.PathPrefix("/managing/{id}/").Subrouter()
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论