go的gin框架的中间件

1.中间件

中间件也叫拦截器或者过滤器,这些中间件会在路由之前执行,以此完成一些特定功能,比如打印日志啊、登录认证、权限认证、错误返回等。


2.全局中间件

注册全局中间件后,此路由所有接口执行之前都会执行此中间件

// 定义中间
func MIddle1() gin.HandlerFunc {
	return func(c *gin.Context) {
		fmt.Println("中间件开始执行了")
		// 设置变量到Context的key中,可以通过Get()取
		c.Set("request", "中间件")
		status := c.Writer.Status()
		fmt.Println("中间件执行完毕", status)
	}
}

func main() {
	// 1.创建路由
	r := gin.Default()
	// 注册中间件
	r.Use(MIddle1())
	{
		r.GET("/middle", func(c *gin.Context) {
			fmt.Println("middleq请求")
			// 取值
			req, _ := c.Get("request")
			fmt.Println("request:", req)
			// 页面接收
			c.JSON(200, gin.H{"request": req})
		})

	}
	r.Run()
}

在这里插入图片描述

3.局部中间件

局部中间件只会在本接口执行之前执行此中间件

// 定义中间
func MIddle1() gin.HandlerFunc {
	return func(c *gin.Context) {
		fmt.Println("中间件开始执行了")
		// 设置变量到Context的key中,可以通过Get()取
		c.Set("request", "中间件")
		status := c.Writer.Status()
		fmt.Println("中间件执行完毕", status)
	}
}

func main() {
	// 1.创建路由
	r := gin.Default()
	{
		r.GET("/middle",MIddle1(), func(c *gin.Context) {
			fmt.Println("middleq请求")
			// 取值
			req, _ := c.Get("request")
			fmt.Println("request:", req)
			// 页面接收
			c.JSON(200, gin.H{"request": req})
		})

	}
	r.Run()
}

在这里插入图片描述


4.c.Next()函数介绍

如果中间件调用了c.Next(),这意味着在c.Next()后会将请求处理程序传递给下一个中间件或者http请求,等到下个步骤处理完成后再回到c.Next()函数后执行
    1).在一个中间函数中添加c.Next()在这里插入图片描述
    2).在多个中间函数中全部添加c.Next()

在这里插入图片描述
    3).在多个中间函数中部分添加c.Next()

在这里插入图片描述
代码:

 // 1号中间
func MIddle1(c *gin.Context) {
   	fmt.Println("MIddle1中间件开始执行了")
   	c.Next()
   	fmt.Println("MIddle1中间件执行完毕")
}
// 2号中间
func MIddle2(c *gin.Context) {
   	fmt.Println("MIddle2中间件开始执行了")
   	c.Next()
   	fmt.Println("MIddle2中间件执行完毕")
}
// 3号中间
func MIddle3(c *gin.Context) {
   	fmt.Println("MIddle3中间件开始执行了")
   	c.Next()
   	fmt.Println("MIddle3中间件执行完毕")
}

func main() {
   // 1.创建路由
   r := gin.Default()
   r.Use(MIddle1,MIddle2,MIddle3)
   {
   	r.GET("/middle", func(c *gin.Context) {
   		fmt.Println("middle处理")
   		// 页面接收
   		c.JSON(200, gin.H{"request": "ok"})
   	})

   }
   r.Run()
}

一些第三方中间件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值