本教材由知了传课辛苦制作而成,仅供学习使用,请勿用于商业用途!如进行转载请务必注明出处!谢谢!

中间件中的Next和Abort

一、Next

在我们定义的众多中间件,会形成一条中间件链,而通过 Next 函数来对后面的中间件进行执行
特点:

  • 1.当遇到c.Next()函数时 它取出所有的没被执行过的注册的函数都执⾏⼀遍,然后再回到本函数中,有点类似递归函数
  • 2.Next 函数是在请求前执行,而 Next 函数后是在请求后执行。
  • 3.可以用在token校验,把用户id存起来供给功能性函数使用

二、Abort

  1. ctx.Abort()方法的作用 终止调用整个链条
  2. 比如:token认证没有通过,不能直接使用return返回,而是使用Abort来终止

三、中间件执行顺序示例

func MiddleWare1(ctx *gin.Context) { fmt.Println("这是自定义中间件1--开始") ctx.Next() fmt.Println("这是自定义中间件1--结束") } func MiddleWare2() gin.HandlerFunc { return func(ctx *gin.Context) { fmt.Println("这是自定义中间件2--开始") if 3 < 4{ // 满足条件 ctx.Abort() } ctx.Next() fmt.Println("这是自定义中间件2--结束") } } func MiddleWare3(ctx *gin.Context) { fmt.Println("这是自定义中间件3--开始") ctx.Next() fmt.Println("这是自定义中间件3--结束") } router := gin.Default() router.Use(Middleware1,Middleware2(),Middleware3)

四、利用Next计算请求时间

func Middle(ctx *gin.Context){ t := time.Now() //可以设置一些公共参数 c.Set("example", "12345") //等其他中间件先执行 c.Next() //获取耗时 latency := time.Since(t) fmt.Printf("cost time:%d us", latency/1000) }

1612人已阅读,今天你学习了吗?

添加新回复
目录