简介

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

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

目录

app/http/middlewares

执行流程

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

中间件定义

示例代码

  1. func TokenHandler(c *gin.Context) {
  2. //before request
  3. CheckToken()//检测请求中的token是否合法
  4. c.Next() //执行下一个中间件或者控制器逻辑
  5. //after request
  6. ResetToken()//重置返回的token
  7. }

中间件使用

结合路由模块使用中间件

  1. func RegisterRoute(router *gin.Engine) {
  2. //middleware: 服务错误处理 => 生成请求id => access log
  3. router.Use(middlewares.ServerRecovery(), middlewares.TokenHanlder)
  4. router.NoRoute(controllers.Error404)
  5. router.GET("/hello", controllers.HandleHello)
  6. //api版本
  7. v1 := router.Group("/v1")
  8. {
  9. v1.Use(middlewares.Auth)
  10. v1.GET("/banner_list", controllers.GetBannerList)
  11. }
  12. }