gin gonic中间件,如何获取链

时间:2015-12-11 20:19:40

标签: go go-gin

我正在使用gin gonic golang框架编写中间件。我想在我的中间件中知道,如果对下一个处理程序的调用失败并根据它采取行动。

func foo() gin.HandlerFunc {
    //do something..
    c.Next()
    //do something based on result of c.Next()
}

我该怎么做?下一个文档没有提供更多信息https://godoc.org/github.com/gin-gonic/gin#Context.Next

你能提出任何建议吗?我基本上想要检查不存在的api端点,例如,有人输入了一个URL,我们没有任何api端点,然后我可以在这里检测到它。

2 个答案:

答案 0 :(得分:1)

Engine上有一个名为NoRoute的方法,您可以通过路由处理程序来处理404等。

答案 1 :(得分:0)

我将回答我的问题,因为我找到了一种方法来处理路径未找到/方法未找到等问题。想法是使用来自的context.Error()在gin上下文中设置错误NoRoute / NoMethod处理程序。这会给c.Errors中的错误片段添加一个错误,然后可以在中间件函数中使用它。

func MyMiddleware() gin.HandlerFunc {
    return func(c *gin.Context) {
       //do something here
       c.Next()
       //do something based on error in c.
       if c.Errors.Error() != nil {
           //error case, get out
           return 
       }
       //else continue regular processing. 
    }
}


engine.NoRoute(func(c *gin.Context) {
    c.JSON(404,
        gin.H{"error": gin.H{
            "key":         "not allowed",
            "description": "not allowed",
        }})
    c.Error(errors.New("Failed to find route")) //Set the error here. 
})

希望它有所帮助。