【问题标题】:How can I add middleware to a subrouter in Go?如何将中间件添加到 Go 中的子路由器?
【发布时间】:2020-02-08 03:41:35
【问题描述】:

我有以下代码:

    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)Using middleware with Golang Gorilla mux subrouters 但是上面问题的答案只能使用静态前缀,而我想知道与“/{bucket}”匹配的存储桶名称

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

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

【问题讨论】:

标签: go


【解决方案1】:

你只需要添加这样的东西:

bucket.use(middleware)

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

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

【讨论】:

    猜你喜欢
    • 2016-06-12
    • 2020-09-28
    • 1970-01-01
    • 2015-09-28
    • 2023-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多