gin框架06

gin中间件

1.gin可以构建中间件,但它只对注册过的路由函数起作用
2.对于分组路由,嵌套使用中间件,可以限定中间件的作用范围
3.中间件分为全局中间件,单个路由中间件和群中间件
4.gin中间件必须是一个gin.HandlerFunc类型


中间件.png

######### 应用
登录、权限

全局中间件

所有请求都经过此中间件

package main

import (
"fmt"
"github.com/gin-gonic/gin"
"time"
)
// 定义中间件
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() {
    // 1. 创建路由器
    r := gin.Default()
    // 1.注册中间件
    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})
        })
    }

    // 3.监听端口,默认8080
    r.Run(":8000")
}
结果.png

终端.png

Next()方法

看源码


next.png

遍历了handle

全局中间件和局部中间件
package main

import (
"fmt"
"github.com/gin-gonic/gin"
"time"
)
// 定义中间件
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() {
    // 1. 创建路由器
    r := gin.Default()
    // 1.注册中间件
    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.GET("/middleware2", MiddleWare(),func(c *gin.Context) {
            // 取值
            req,_:=c.Get("request")
            fmt.Println("request:",req)
            // 页面接收
            c.JSON(200,gin.H{"request:":req})
        })
    }

    // 3.监听端口,默认8080
    r.Run(":8000")
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

相关阅读更多精彩内容

友情链接更多精彩内容