03-Gin中间件
  Pv8ga8lmRvBb 2023年11月02日 71 0


目录

一:全局中间件

1.1: 简单的中间件案例

  • 实现的功能:在每个请求之前,追加一个随机值。
  • 随机值中间件的实现
package middleware

import (
"github.com/gin-gonic/gin"
"math/rand"
"time"
)

func init() {
rand.Seed(time.Now().UnixNano())
}

var letterRunes = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")

func RandStringRunes(n int) string {
b := make([]rune, n)
for i := range b {
b[i] = letterRunes[rand.Intn(len(letterRunes))]
}
return string(b)
}

// RandomMiddleWare MiddleWare 随机值中间件,每个请求进来, 我们都产生一个随机值, 存放在上下文中。
func RandomMiddleWare() gin.HandlerFunc {
return func(c *gin.Context) {
// 随机值中间件会在请求上下文中, 设置一个随机值
c.Set("randomValue", RandStringRunes(20))
}
}
  • 将中间件注册到引擎中
package routers

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

type Option func(*gin.Engine)

var options []Option

// Include 将APP中的路由放入options切片中
func Include(opts ...Option) {
options = append(options, opts...)
}

// Init 初始化引擎, 并将路由注册到引擎中
func Init() *gin.Engine {
engine := gin.Default()
// 注册中间件
engine.Use(middleware.RandomMiddleWare())
for _, opt := range options {
opt(engine)
}
return engine
}

1.2: 控制请求之后再运行中间件的后半部分

  • Next()函数控制
  • 代码案例:
// RandomMiddleWare MiddleWare 随机值中间件,每个请求进来, 我们都产生一个随机值, 存放在上下文中。
func RandomMiddleWare() gin.HandlerFunc {
return func(c *gin.Context) {
// 随机值中间件会在请求上下文中, 设置一个随机值
c.Set("randomValue", RandStringRunes(20))
// 阻断
c.Next()
fmt.Printf("返回请求后再执行\n")
}
}
  • 运行效果:
该请求的随机值是PVaxecLBhcWXDbIkaxHU
返回请求后再执行
[GIN] 2022/09/08 - 18:05:56 | 200 | 218.628µs | 127.0.0.1 | GET "/animal/login?name=root&password=123456"

二:局部中间件

  • 1: 局部中间件不注册到引擎中
  • 2: 局部中间件再路由中添加即可, 这边只有某些路由会走这个中间件。
func Routers(e *gin.Engine) {
e.GET("/animal/login", middleware.RandomMiddleWare(), testArgs)
}

三: 常用的中间件

  • 参考官网推荐


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  YgmmQQ65rPv4   2023年11月19日   13   0   0 Java应用程序
  Y8XIq1u6ceQW   2023年11月19日   25   0   0 Java
  AeUHztwqqxTz   2023年11月02日   22   0   0 Javatomcatapache
  ltERVYe6WHLK   2023年11月02日   21   0   0 数据类型C#初始化
Pv8ga8lmRvBb
最新推荐 更多