为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
杨魅力 2021-11-29 15:55:50
我正在编写一个中间件,使用 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 回答

?
森栏

TA贡献1810条经验 获得超5个赞

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


查看完整回答
反对 回复 2021-11-29
?
智慧大石

TA贡献1946条经验 获得超3个赞

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

})

希望能帮助到你。


查看完整回答
反对 回复 2021-11-29
  • 2 回答
  • 0 关注
  • 190 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信