Skip to content

通用 Gin 中间件集合(CORS、TraceID、I18n、可重复读 body、Recover、XSS、path/param)。全局链注册顺序固定,业务侧一般不直接调,仅 XSS 净化函数被 oplog 引用。

关键导出

  • Recover() gin.HandlerFunc 兜底 panic 与 c.Error,HTTP 恒 200
  • CORS() / CORSWithConfig(cfg) 必须注册在 Auth 之前
  • TraceID() / TraceIDFrom(ctx) / NewTraceID() 必须在 CORS 之后
  • I18n() / LocaleFrom(c) i18n.Locale 必须在 Auth 之前
  • RepeatableBody() / BodyBytes(c) []byte 可重复读请求体
  • SanitizeFormParam / SanitizeJSONParam XSS 净化(oplog 用)

全局链注册顺序固定:Recover → CORS → TraceID → RepeatableBody → AccessLog → XSS → I18n

典型用法

go
// cmd/standalone/main.go(节选)
r.Use(middleware.Recover())
r.Use(middleware.CORS())
r.Use(middleware.TraceID())
r.Use(middleware.RepeatableBody())
r.Use(middleware.AccessLog())
r.Use(middleware.XSS())
r.Use(middleware.I18n())

坑/约定

WARNING

  • Recover 只在 !c.Writer.Written() 时渲染 c.Error,故重复提交中间件 panic 路径刻意不 flush 缓冲区(否则会写入半截响应)。
  • TraceID 无条件回写响应头(在 c.Next() 之前)。
  • CORS 的 Vary 头在判断是否跨域前就加。
  • I18n 把语言写进 gin.Contextrequest.Context(),下游服务取 i18n.LocaleFrom 必须用 c.Request.Context()。 :::

相关页:/architecture/request-flow/pkg-reference/response-errs/pkg-reference/misc

基于 MIT 协议开源