Skip to content

middleware

Tinson Ho edited this page Jul 10, 2019 · 3 revisions

简介

中间件为过滤进入应用程序的 HTTP 请求提供了一种方便的机制。例如一个中间件来验证用户的身份认证。如果用户没有通过身份认证,中间件会将用户重定向到登录界面。但是,如果用户被认证,中间件将允许该请求进一步进入该应用。

当然,除了身份认证以外,还可以编写另外的中间件来执行各种任务。例如:CORS 中间件可以负责为所有离开应用的响应添加合适的头部信息;日志中间件可以记录所有传入应用的请求。

目录

app/http/middlewares

执行流程

入口->中间件1(before)->中间件N(before)->控制器->中间件N(after)->中间件1(after)—>结束

中间件定义

示例代码

func TokenHandler(c *gin.Context)  {
   //before request
   CheckToken()//检测请求中的token是否合法

   c.Next() //执行下一个中间件或者控制器逻辑

   //after request
   ResetToken()//重置返回的token
}

中间件使用

结合路由模块使用中间件

func RegisterRoute(router *gin.Engine) {
   //middleware: 服务错误处理 => 生成请求id => access log
   router.Use(middlewares.ServerRecovery(), middlewares.TokenHanlder)

   router.NoRoute(controllers.Error404)
   router.GET("/hello", controllers.HandleHello)

   //api版本
   v1 := router.Group("/v1")
   {
      v1.Use(middlewares.Auth)
      v1.GET("/banner_list", controllers.GetBannerList)
   }
}
Clone this wiki locally