3

我正在编写一个中间件,使用 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端点,那么我可以在这里检测它。

4

2 回答 2

1

有一个方法Engine调用NoRoute,您可以传递路由处理程序来处理 404 等。

于 2015-12-11T20:41:14.617 回答
1

我将回答我的问题,因为我找到了一种方法来处理此类问题,例如找不到路由/找不到方法等。想法是使用 NoRoute/NoMethod 中的 context.Error() 在 gin 上下文中设置错误处理程序。这会在 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. 
})

希望能帮助到你。

于 2015-12-19T01:13:58.353 回答