Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
gin gonic中间件,如何获取链中下一个处理程序的失败/成功状态_Go_Go Gin - Fatal编程技术网

gin gonic中间件,如何获取链中下一个处理程序的失败/成功状态

gin gonic中间件,如何获取链中下一个处理程序的失败/成功状态,go,go-gin,Go,Go Gin,我正在使用gin-gonic-golang框架编写一个中间件。我想知道在我的中间件中,对下一个处理程序的调用是否失败,并据此采取行动 func foo() gin.HandlerFunc { //do something.. c.Next() //do something based on result of c.Next() } 我该怎么做?下一步的文档没有提供太多信息 你能提供一些建议吗。我基本上想检查不存在的api端点,例如,有人输入一个URL,我们没有任何api

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

func foo() gin.HandlerFunc {
    //do something..
    c.Next()
    //do something based on result of c.Next()
}
我该怎么做?下一步的文档没有提供太多信息


你能提供一些建议吗。我基本上想检查不存在的api端点,例如,有人输入一个URL,我们没有任何api端点,那么我可以在这里检测它

引擎上有一个名为
的方法,您可以传递路由处理程序来处理404之类的问题。

我将回答我的问题,因为我找到了一种方法来处理这类问题,比如找不到路由/找不到方法等。其思想是使用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. 
})

希望能有帮助

谢谢,我正在使用NoRoute,我仍然看到我的中间件被调用(当没有找到路由时),所以我仍然希望在我的中间件函数中进行控制。你解决了这个问题吗?我有同样的问题