You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 12:13:09