gin middleware 注意事项

1. gin middleware 如果要中止后面中间件及所有程序的执行, 需要使用 c.Abort() + return

其中 Abort 会中止其后的中间件及页面处理程序, 而不会中止当前中间件函数内的余下程序, 
使用 return 来中止当前中间件内后部的程序
func RejectMethodsExceptGet() gin.HandlerFunc {
    rejectMethods := map[string]struct{}{
        "POST":   {},
        "DELETE": {},
        "PUT":    {},
        "PATCH":  {},
    }
    return func(c *gin.Context) {
        if _, exist := rejectMethods[c.Request.Method]; exist {
            c.AbortWithStatusJSON(403, gin.H{
                "err_msg": "invalid method",
            })
            return
        }

        c.Next()
    }
}

2. 中间件 Use 需要写在路由注册之前, 否则将不对之前注册的路由起作用

    r := gin.New()
    r.Use(RejectMethodsExceptGet())

    r.GET("/test", func(c *gin.Context) {
        example := c.MustGet("example").(string)

        // it would print: "12345"
        log.Println(example)
    })

你可能感兴趣的:(gin middleware 注意事项)