什么是中间件
在开发中,中间件是一种常见的模式。
中间件通常被称为在请求到达处理程序之前执行的一些代码,或者在响应离开处理程序之前执行的代码
中间件的功能实现举例:
- 身份验证:检查请求是否携带了正确的身份验证信息
- 记录日志:记录请求和响应的内容和元数据,方便系统的调试和分析。
- 编解码和加解密:对请求和响应的数据进行编解码和加解密
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!",
})
})