我们不能在大猩猩子路由器路径前缀中包含变量吗?



我正在尝试添加一个子路由器到我的路由器代码:

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。是我错过了什么,还是根本不可能?

我昨晚在梦里找到了解决办法,哈哈

基本上是以下前缀的问题:

managementRouter := baseRouter.PathPrefix("/managing/{id}").Subrouter()

表示路由器无法知道id字段在哪里停止。因此,当我们访问一个端点时,例如这个url:/api/v1/managing/627e6f7e05db3552970e1164/add-employees,路由器认为{id}变量实际上是627e6f7e05db3552970e1164/add-employees,并且不匹配它之后的任何路由。

所以我找到的解决方案是告诉路由器变量后面是什么。为此,只需在变量后面添加一个斜杠:

managementRouter := baseRouter.PathPrefix("/managing/{id}/").Subrouter()

相关内容

  • 没有找到相关文章

最新更新