gin 实践四 中间件(上)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了gin 实践四 中间件(上)相关的知识,希望对你有一定的参考价值。
参考技术A 在写这篇之前需要讲一下之前几篇中的注意点
一. 包的引入:因为现在还在本地开发,所以所有的本地包引入都以本地路径的方式例如
等后期上传到平台之后统一修改
二. 前面可能有没有讲明白的地方,后期会出一篇完整版,将所有的串联起来出一篇文章
三. 规划,编写的目的是实现一个以 gin 为基础的脚手架
painc 是一个内建函数,可以中断原有的控制流程,进入一个“恐慌”的流程(就是意思我遇到问题了,不知道该咋办,我好慌),这个过程称为错误处理流程。如果处理不好可能导致系统崩溃,服务重启等严重问题。
现在我们就来编写一个简易的捕获异常的中间件,来处理当系统遇到 painc 时合理的处理,并且返回明确的提示。
在 routers/middleware 文件夹下新建文件 recovery.go
修改 router.go 文件,引入刚刚写的中间件
简单测试一下随便修改之前的一个接口,然后访问
在没有引入中间件时,将会出现以下情况,前端没有返回,后台报错
引入中间件后,前端获取到了信息,后端也正常
GIn_中间件
-
gin可以构建中间件,但它只对注册过的路由函数起作用
-
对于分组路由,嵌套使用中间件,可以限定中间件的作用范围
-
中间件分为全局中间件,单个路由中间件和群组中间件
-
gin中间件必须是一个 gin.HandlerFunc 类型
1. 全局中间件
所有请求都会经过的中间件
package main import ( "github.com/gin-gonic/gin" "time" "fmt" ) // 定义中间 func MiddleWare() gin.HandlerFunc { return func(c *gin.Context) { t := time.Now() fmt.Println("中间件开始执行了") // 设置变量到Context的key中,可以通过Get()取 c.Set("request", "中间件") // 执行函数 c.Next() // 中间件执行完后续的一些事情 status := c.Writer.Status() fmt.Println("中间件执行完毕", status) t2 := time.Since(t) fmt.Println("time:", t2) } } func main() { // 创建路由 r := gin.Default() // 注册中间件 r.Use(MiddleWare()) // {}为了代码规范 { r.GET("/middleware", func(c *gin.Context) { // 取值 req, _ := c.Get("request") fmt.Println("request:", req) // 页面接收 c.JSON(200, gin.H{"request": req}) }) } r.Run(":8000") }
1.1 next方法
2. 局部中间件
以上是关于gin 实践四 中间件(上)的主要内容,如果未能解决你的问题,请参考以下文章