在使用gin框架的时候,我们经常会用到自定义的中间件,这里有一个需要注意的点
自定义中间件的写法 返回值需要是gin.HandlerFunc
下面为我自定义的一个异常处理器。全局的panic都会走到这里来
func Recover() gin.HandlerFunc {
return func(c *gin.Context) {
defer func() {
if r := recover(); r != nil {
//逻辑处理
}
}()
c.Next()
}
}
在注册全局中间件的时候需要注意 如果要使用自定义的中间件,创建gin引擎时 需要使用gin.New()
如果使用gin.default()
就会默认给你带上gin自带的中间件,具体可以看gin源码
最重要的一点,注册自定义中间件一定在配置路由之前进行注册,不然在路由中会不生效
func Default() *Engine {
debugPrintWARNINGDefault()
engine := New()
engine.Use(Logger(), Recovery())
return engine
}
注册路由部分代码
package routers
import (
"gin/controller/app"
"gin/handler"
"github.com/gin-gonic/gin"
)
// SetupRouter 配置路由信息
func SetupRouter() *gin.Engine {
r := gin.New()
//使用自定义中间件handler.Recover()
r.Use(handler.Recover(), gin.Logger())
GroupV1 := r.Group("/app")
{
GroupV1.Any("/product/UserAdd", app.GetRedis)
GroupV1.Any("/member/UserAdd", app.UserAdd)
}
return r
}