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

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

好的所以我昨晚在梦中找到了解决方案哈哈

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

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

是路由器无法知道id字段在哪里停止。因此,当我们使用 url : /api/v1/managing/627e6f7e05db3552970e1164/add-employees 访问端点时,路由器认为 {id} 变量字面意思是 627e6f7e05db3552970e1164/add-employees 并且不匹配其后的任何路由。

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

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