Gin 如何应用中间件

Gin 支持三种级别的中间件应用能力:

  1. 全局,一般是通过 gin.Engine.Use() 来实现;
  2. 路由组级别,通过 gin.Group.Use() 来实现;
  3. 路由级别,通过 route.XXX() 方法的第二个和 Handler 之前的参数来实现。

Gin 提供了 gin.Engine.Use() 方法可以应用中间件,同时路由分组函数 route.Group() 返回的 gin.Group 也提供了应用中间件的能力。

也就是说,我们既可以使用 router.Use() 将中间件设置为全局的,也可以使用 v1.Use() 将中间件设置为分组级别的。

另外,所有的路由定义还提供了三个参数的变体,其中第二个参数用于应用中间件,也就是说还提供了路由级别的中间件能力

r.GET("/benchmark", MyBenchLogger(), benchEndpoint)

特别说明的是 gin.Default() 其实是由下面的代码封装而来

// 新建一个没有任何默认中间件的路由
r := gin.New()

// 全局中间件
// Logger 中间件将日志写入 gin.DefaultWriter,即使你将 GIN_MODE 设置为 release。
// By default gin.DefaultWriter = os.Stdout
r.Use(gin.Logger())

// Recovery 中间件会 recover 任何 panic。如果有 panic 的话,会写入 500。
r.Use(gin.Recovery())

将中间件应用到全局作用域

package main

import (
    "github.com/gin-gonic/gin"
)

func main() {
    // 新建一个没有任何默认中间件的路由
  r := gin.New()

  // 全局中间件
  // Logger 中间件将日志写入 gin.DefaultWriter,即使你将 GIN_MODE 设置为 release。
  // By default gin.DefaultWriter = os.Stdout
  r.Use(gin.Logger())

  // Recovery 中间件会 recover 任何 panic。如果有 panic 的话,会写入 500。
  r.Use(gin.Recovery())

    // Listen and serve on 0.0.0.0:8080
    r.Run(":8080")
}

将中间件应用路由组作用域

package main

import (
    "github.com/gin-gonic/gin"
)


func main() {
    r := gin.Default()

  // 认证路由组
    // authorized := r.Group("/", AuthRequired())
    // 和使用以下两行代码的效果完全一样:
    authorized := r.Group("/")
  // 路由组中间件! 在此例中,我们在 "authorized" 路由组中使用自定义创建的 
  // AuthRequired() 中间件
    authorized.Use(AuthRequired())
    {
        authorized.POST("/login", loginEndpoint)
        authorized.POST("/submit", submitEndpoint)
        authorized.POST("/read", readEndpoint)

        // // 嵌套路由组
        testing := authorized.Group("testing")
        // visit 0.0.0.0:8080/testing/analytics
        testing.GET("/analytics", analyticsEndpoint)
    }

    // Listen and serve on 0.0.0.0:8080
    r.Run(":8080")
}

将中间件应用到路由作用域

package main

import (
    "github.com/gin-gonic/gin"
)


func main() {
  r := gin.Default()

    // 路由定义,我们可以配置多个路由中间件。
    r.GET("/benchmark", MyBenchLogger(), benchEndpoint)

    // Listen and serve on 0.0.0.0:8080
    r.Run(":8080")
}
关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.