IT序号网

go的gin框架的中间件

itxm 2022年04月19日 编程语言 147 0

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() 
} 

一些第三方中间件


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

go的gin框架之数据解析和绑定