doucai6663 2018-05-21 15:40
浏览 236
已采纳

Golang Echo无法在HTTPErrorHandler中使用自定义上下文

e.Use(func(h echo.HandlerFunc) echo.HandlerFunc {
  return func(c echo.Context) error {
    cc := c.(*CustomContext)
    return h(cc)
  }
})


e.HTTPErrorHandler = func(err error, c echo.Context) {
  cc := c.(*CustomContext)
}

I set custom HTTPErrorHandler and CustomContext.

I want to use CustomContext in HTTPErrorHandler.

c.Error(echo.NewHTTPError(http.StatusUnauthorized, "error"))

is work well.

but, panic echo.Context is *echo.context, not *CustomContext error when access not registered page.

Why occurred panic error when access not found page?

  • 写回答

1条回答 默认 最新

  • duandu9260 2018-05-21 15:53
    关注

    The immediate cause of the panic is that the error handler is being called with a "standard" context. To make your type assertion safe, use the two-value form:

    e.HTTPErrorHandler = func(err error, c echo.Context) {
        cc, ok := c.(*CustomContext)
        if ok {
            // A CustomContext was received
        } else {
            // Something else, probably a standard context, was received
        }
    }
    

    But more generally speaking, what you're doing (using a custom context type) is probably a bad idea. If you explain what you're trying to accomplish, there is probably a better, more robust way to solve it.

    One obvious alternative would be to use standard Go contexts, as exposed through echo via c.Request().Context().

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?