应用场景

中间件适合处理一些公共的业务逻辑,比如登录认证、权限校验、数据分页、记录日志、耗时统计。

中间件的使用

使用中间件必须是一个 func(c *gin.Context)类型的函数,底层实现了handeFunc方法

中间件分类

全局中间件

1、定义一个函数接收一个*gin.Context类型的参数,和handler的写法是一样的:

1
2
3
4
5
6
func MyMiddleware(c *gin.Context){

}

router = gin.Default()
router.Use(MyMiddleware)

2、定义一个返回值为HandlerFunc类型的函数

1
2
3
4
5
6
7
func MyMiddleware(){
return func(c *gin.Context){
}
}

router = gin.Default()
router.Use(MyMiddleware())

路由组中间件

1
2
3
4
5
...
server := gin.Default()
...
server.Group("/app/v1").Use(Middleware1())
...

路由中间件

1
router.GET("/login", LoginMiddleware, handler)

Abort和Next

c.Next():先执行后续的中间件,最后再继续执行本函数

c.Abort():确保不调用此请求后续中间件,之前和当前中间件不受应用,如鉴权失败不再继续调用。