Fee107ea4b6e443964900c4eadfdcfe3
gin框架Api:路由中间件、添加返回信息、自定义错误

本节课我们来讲解go语言框架gin的middleware,可以作为路由拦截器使用,并完善我们的框架,添加一些response方法和错误处理。(源码在文章末尾)

gin middleware 中间件

在 gin 中,可以通过如下方法使用 middleware:

g := gin.New()
g.Use(middleware.AuthMiddleware())

其中 middleware.AuthMiddleware() 是 func(*gin.Context) 类型的函数。中间件只对注册过的路由函数起作用。

在 gin 中可以设置 3 种类型的 middleware:
全局中间件
单个路由中间件
群组中间件

  • 全局中间件:注册中间件的过程之前设置的路由,将不会受注册的中间件所影响。只有注册了中间件之后代码的路由函数规则,才会被中间件装饰。
  • 单个路由中间件:需要在注册路由时注册中间件
    r.GET("/benchmark", MyBenchLogger(), benchEndpoint)
  • 群组中间件:只要在群组路由上注册中间件函数即可。
    举列子:
    u := g.Group("/video")
    //拦截器
    u.Use(middleware.AuthMiddleware())
    {
        //u.POST("", user.Create)
        //u.DELETE("/:id", user.Delete)
        //u.PUT("/:id", user.Update)
        u.GET("/getAddressByFileId", http.GetAddressByFileID)
        //u.GET("/:username", user.Get)
    }

AuthMiddleware方法用于校验token、sign,只要是video群组的都会走这个拦截器, 这是群组中间件。

添加返回信息

func SendResponse(c *gin.Context, err error, data interface{}) {
    code, message := errno.DecodeErr(err)

    // always return http.StatusOK
    c.JSON(http.StatusOK, Response{
        Code:    code,
        Message: message,
        CurrentTime: time.Now().Unix(),
        Data:    data,
    })
}

添加错误信息

```
func DecodeErr(err error) (int, string) {
if err == nil {
return OK.Code, OK.Message
}

switch typed := err.(type) {
case *Err:
    return typed.Code, typed.Message
case *Errno:
    return typed.Code, typed.Message
default:
}

return InternalServerError.Code, err.Error()

}

top Created with Sketch.