如何让Gin中间件仅作用于部分处理器而非全部?
Gin中间件仅作用于指定处理器的实现方法
要让Gin中间件仅作用于部分处理器,你需要移除全局中间件注册,改用路由级别的中间件绑定方式——也就是在注册目标路由时,把中间件作为参数放在对应处理器的前面。
具体修改步骤:
- 从全局中间件列表中移除
m.LogHTTPHandler(),保留全局需要的gin.Recovery() - 在需要应用中间件的
POST("/")路由中,将m.LogHTTPHandler()作为前置参数传入,紧跟在路径之后、处理器之前
修改后的完整代码:
func (srv *server) Router(repository storage.Repository, cfg config.Flags) *gin.Engine { h := handlers.NewHandlerProvider() m := middlewares.NewMiddlewareProvider() srv.httpServer.Use(gin.Recovery()) // 移除全局的m.LogHTTPHandler()注册 srv.httpServer.POST("/", m.LogHTTPHandler(), FirstHandler) // 仅对此路由应用日志中间件 srv.httpServer.GET("/qwe", SecondHandler) // 此路由不使用日志中间件 return srv.httpServer }
原理说明:
Gin中,Use()方法注册的是全局中间件,会作用于所有后续注册的路由;而在调用POST()/GET()等路由方法时,传入的中间件是路由专属中间件,只会对当前路由绑定的处理器生效。
内容的提问来源于stack exchange,提问作者volnistii11
相关产品推荐
相关产品推荐

