Golang Gin框架 中间件

2023-10-14 19:21:23 浏览数 (2)

什么是中间件

在开发中,中间件是一种常见的模式。

中间件通常被称为在请求到达处理程序之前执行的一些代码,或者在响应离开处理程序之前执行的代码

中间件的功能实现举例:

  • 身份验证:检查请求是否携带了正确的身份验证信息
  • 记录日志:记录请求和响应的内容和元数据,方便系统的调试和分析。
  • 编解码和加解密:对请求和响应的数据进行编解码和加解密
Gin中间件代码示例
代码语言:javascript复制
import (
    "fmt"
    "github.com/gin-gonic/gin"
)

func Logger() gin.HandlerFunc {
    return func(c *gin.Context) {
        fmt.Println("Request URL:", c.Request.URL)
        c.Next()
    }
}

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

    router.Use(Logger())

    router.GET("/", func(c *gin.Context) {
        c.JSON(200, gin.H{
            "message": "Hello, World!",
        })
    })

    router.Run(":8080")
}
身份验证中间件
代码语言:javascript复制
// 定义身份验证中间件
func authMiddleware() gin.HandlerFunc {
	return func(c *gin.Context) {
		token := c.Request.Header.Get("token")
		if token == "valid_token" {
			// token 验证通过,将用户信息保存到上下文中
			c.Set("user", "admin")
			c.Next()
		} else {
			// token 验证失败,返回错误响应
			c.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{
				"message": "Unauthorized",
			})
		}
	}
}
默认中间件

gin.Default()默认使用了 Logger 和 Recovery 中间件

代码语言:javascript复制
// Default returns an Engine instance with the Logger and Recovery middleware already attached.
func Default() *Engine {
	debugPrintWARNINGDefault()
	engine := New()
	engine.Use(Logger(), Recovery())
	return engine
}

Logger 中间件将日志写入 gin.DefaultWriter,即使配置了 GIN_MODE=release。 Recovery 中间件会 recover 任何 panic。如果代码有 panic 的话,返回500 响应码。

如果不想使用默认中间件

代码语言:javascript复制
router := gin.New()
gin中间件中数据传递

可以使用context进行上下文传递,举例如下

代码语言:javascript复制
func LogMiddleware() gin.HandlerFunc {
   return func(c *gin.Context) {
      fmt.Println("Request URL:", c.Request.URL)
      c.Set("Logged", "yes")
      c.Next()
   }
}
代码语言:javascript复制
router.GET("/", func(c *gin.Context) {
    	fmt.Println(c.Get("Logged"))
        c.JSON(200, gin.H{
            "message": "Hello, World!",
        })
    })

0 人点赞