繁体   English   中英

如何将中间件添加到 Go 中的子路由器?

[英]How can I add middleware to a subrouter in Go?

我有以下代码:

    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

我正在尝试在“bucket”子路由器处理的所有操作之上添加统计信息集合。 此统计信息收集框架将需要传递给存储桶使用的所有处理程序的“存储桶”名称。

有没有办法在 Go 中为子路由器添加包装器? 我发现了一些类似的问题:

(i) 在 Golang Gorilla mux 子路由器中使用中间件但是上面问题中的答案只能与静态前缀一起使用,而我想知道与“/{bucket}”匹配的存储桶名称

(ii)是另一个使用新 mux 对象解决相同问题的链接。 这可能有效,但它看起来很绕代码。 我是 golang 的新手,我正在更改更大代码库的一小部分,所以我不确定使用第一个 mux 对象对其余代码的影响。

有没有办法在不使用(ii)中的解决方案的情况下做我需要的事情?

您只需要添加如下内容:

bucket.use(middleware)

中间件只会在这个子路由器中使用。

这是一个完整的例子: https : //gist.github.com/cep21/a3fc8e1462d19c46422c03b0466d5869

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM