我有以下代码:
apiRouter := mux.NewRoute().PathPrefix("/").Subrouter()
// Bucket router
bucket := apiRouter.PathPrefix("/{bucket}").Subrouter()
bucket.Methods("HEAD").Path("/{object:.+}").HandlerFunc(
api.HeadObjectHandler)
// Similarly handle many more methods
我正在尝试在“桶”子路由器处理的所有操作之上添加统计信息收集。此统计信息收集框架将需要传递给存储桶使用的所有处理程序的“存储桶”名称。
有没有办法在 Go 中为子路由器添加包装器?我发现了一些类似的问题:
(i) Using middleware with Golang Gorilla mux subrouters 但是上面问题的答案只能与静态前缀一起使用,而我想知道与“/{bucket}”匹配的存储桶名称
(ii) This是另一个链接,它使用新的 mux 对象解决了相同的问题。这可能行得通,但它看起来像是大量围绕代码。我是 golang 的新手,我正在更改更大的代码库的一小部分,所以我不确定使用第一个 mux 对象对剩余代码的影响。
有没有办法在不使用(ii)中的解决方案的情况下完成我需要的事情?
最佳答案
你只需要添加这样的东西:
bucket.use(middleware)
中间件只会在这个子路由器中使用。
这是一个完整的例子:https://gist.github.com/cep21/a3fc8e1462d19c46422c03b0466d5869
关于go - 如何将中间件添加到 Go 中的子路由器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57158847/