4.3. 中间件

未匹配的标注

简介

中间件提供了一种方便的机制来过滤进入应用程序的 HTTP 请求。
gin 框架中验证器、中间件、控制器回调函数本质都是一样的, 都是func(c *gin.Context)函数, 验证器、中间件 gin-pro作为流程回调函数通过过滤/验证后会执行c.Next()继续执行后面的回调函数, 而控制器一般直接定义返回结果 , gin-pro 内置一个允许通过跨域的中间件app/Http/Middleware/cors/cors.go,根据配置文件在路由加载时自动使用

中间件定义

中间件定义一般在app/Http/Middleware文件夹下, 根据自己业务常见自行分组
cors中间件示例:

package cors

import (
    "github.com/gin-gonic/gin"
    "net/http"
)

func Next() gin.HandlerFunc {
    return func(c *gin.Context) {
        method := c.Request.Method
        c.Header("Access-Control-Allow-Origin", "*")
        c.Header("Access-Control-Allow-Headers", "Access-Control-Allow-Headers,Authorization,User-Agent, Keep-Alive, Content-Type, X-Requested-With,X-CSRF-Token,AccessToken,Token")
        c.Header("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT, PATCH, OPTIONS")
        c.Header("Access-Control-Expose-Headers", "Content-Length, Access-Control-Allow-Origin, Access-Control-Allow-Headers, Content-Type")
        c.Header("Access-Control-Allow-Credentials", "true")

        if method == "OPTIONS" {
            c.AbortWithStatus(http.StatusAccepted)
        }
        c.Next()
    }
}

使用中间件

只需要在路由中链式添加Use方法, 参数添加自定义的中间件函数

注意:Use 函数只是注册中间件到[]HandlerFunc,并没有立即执行[具体执行时间和注册数量参考 gin源码], 所以中间件与验证器本质上都是执行过滤的函数, 所以gin-pro验证器也使用Use方法注册

package open

import (
    "gin-pro/app/http/controllers/open"
    "gin-pro/app/http/middleware/cors"
    "github.com/gin-gonic/gin"
)

func LoadDemoRouter(e *gin.Engine) {

    d := e.Group("/open/demo").Use(cors.Next())
    {
        d.GET("/index", open.NewDemoController().Index)
    }
}

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~