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

标签 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

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

有没有办法在 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/

相关文章:

azure - 监视特定对象的事件

google-app-engine - 使用 go 和应用引擎的数据存储导入和解析大型 CSV 文件

database - 为用户无缝地将数据库打包到应用程序中

go - 如何为具有公共(public)部分的多个模型渲染模板

reference - 关于在 Go 上使用等号和 map 的说明

windows - 在 "LockOSThread"GoRoutine 中调用函数

pointers - 尽管映射始终是引用类型,但如果它们是从非指针接收器返回的呢?

string - golang - 如何对字符串或 [] 字节进行排序?

memory - Go 的精确 GC 是如何工作的?

go - 2 个表达式之间的单个 & 符号