我正在使用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端点,然后我可以在这里检测到它。
答案 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.
})
希望它有所帮助。