我正在尝试添加一个子路由器到我的路由器代码:
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()