Gin中间件

单个路由中间件:

中间件就是处理请求参数的函数, 在相应之前完成

c.Abort:表示终止HTTP请求

c.Next():继续调用下一个中间件,c.Next()前面的内容是响应中间件,后面的是请求中间件

package main

import "github.com/gin-gonic/gin"

func _user(c *gin.Context) {
    user := c.Query("dim")
    if user != "admin" {
        c.Abort()
        c.Next()
        c.JSON(200, gin.H{
            "code": 200,
            "msg":  "登录成功",
        })
    }
}
func _admin(c *gin.Context) {
    user := c.Query("dim")
    if user == "admin" {
        // 如果用户名是admin,那么后面的中间件就终止
        c.Abort()
        c.Next()
        // Next后面的会最后执行,先执行没有遇到c.Abort()的所有的c.Next前面的内容,直到遇到c.Abort()或者执行完了,才会去执行c.Next之后的内容
        c.JSON(200, gin.H{
            "code": 200,
            "msg":  "欢迎管理员",
        })
    }
}
func main() {
    router := gin.Default()
    router.POST("/p1", _user, _admin)
    router.Run(":8080")
}

全局注册中间件:

全局中间件是指在应用程序的每个请求处理过程中都会被调用的中间件

使用 router.Use() 全局注册中间件

package main

import (
    "fmt"
    "github.com/gin-gonic/gin"
)

func _d1(c *gin.Context) {
    fmt.Println("in")
    c.Next()
    fmt.Println("out")
}
func main() {
    router := gin.Default()
    router.Use(_d1)
    router.GET("/get1", func(c *gin.Context) {
        fmt.Println("111111111111111111111")
        c.Next()
        fmt.Println("2222222222222222222222")

    })
    router.Run(":80")
}

中间件传参:

使用 c.Set设置传入的内容,c.Get获取传输的内容

如果传递的是结构体这种数据,不能直接 通过 . 获取属性内容,需要使用 接受变量.(结构体类型) 实现数据类型的转换,因为get返回的是一个any类型

package main

import (
    "fmt"
    "github.com/gin-gonic/gin"
)

type User struct {
    Name string
    Age  uint
}

func _demo(c *gin.Context) {
    c.Set("user", User{
        Name: "DIM",
        Age:  20,
    })
}
func main() {
    router := gin.Default()
    router.Use(_demo)
    router.GET("/get1", func(c *gin.Context) {
        _user, _ := c.Get("user")
        // 断言
        u, _ := _user.(User)
        fmt.Println(u.Age)
        fmt.Println(u.Name)
        c.JSON(200, u)
    })
    router.Run(":80")
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值