中间件 chi.Use 与 chi.With 之间的区别

Gur*_*thi 5 middleware go go-chi

使用 Chi 路由器设置中间件时chi.Use和之间有什么区别。chi.With

bla*_*een 5

Use必须在同一组下的所有路由之前声明,而r.With允许您“内联”中间件。

事实上,函数签名是不同的。Use什么都不返回,With返回一个chi.Router.

假设您有一条路线,并且只想向其中一个路线添加中间件,您可以使用r.With

r.Route("/myroute", func(r chi.Router) {
    r.Use(someMiddleware) // can declare it here
    r.Get("/bar", handlerBar)
    r.Put("/baz", handlerBaz)
    // r.Use(someMiddleware) // can NOT declare it here
}

r.Route("/other-route", func(r chi.Router) {
    r.Get("/alpha", handlerBar)
    r.Put("/beta", handlerBaz)

    r.With(someMiddleware).Get("/gamma", handlerQuux)
}
Run Code Online (Sandbox Code Playgroud)

在第一个示例中,someMiddleware为所有子路由声明,而在第二个示例中,r.With仅允许您为路由添加中间件/other-route/gamma


小智 0

根据chi.Usechi.With的文档。

使用将中间件处理程序附加到 Mux 中间件堆栈。

任何 Mux 的中间件堆栈都会在搜索到特定处理程序的匹配路由之前执行,这提供了早期响应、更改请求执行过程或为下一个 http.Handler 设置请求范围值的机会。

With 为端点处理程序添加内联中间件。