Echo 无法在 HTTPErrorHandler 中使用自定义上下文
Echo can't use custom context in 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)
}
我设置了自定义 HTTPErrorHandler 和 CustomContext。
我想在 HTTPErrorHandler 中使用 CustomContext。
c.Error(echo.NewHTTPError(http.StatusUnauthorized, "error"))
工作正常。
但是,当访问未注册页面时出现恐慌 echo.Context is *echo.context, not *CustomContext
错误。
为什么访问找不到页面时出现紧急错误?
恐慌的直接原因是正在使用 "standard" 上下文调用错误处理程序。为了使您的类型断言安全,请使用双值形式:
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
}
}
但更一般地说,您正在做的事情(使用自定义上下文类型)可能不是一个好主意。如果您解释了您要实现的目标,可能会有更好、更可靠的方法来解决它。
一个明显的替代方案是使用标准的 Go 上下文,通过 c.Request().Context()
.
的 echo 公开
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)
}
我设置了自定义 HTTPErrorHandler 和 CustomContext。
我想在 HTTPErrorHandler 中使用 CustomContext。
c.Error(echo.NewHTTPError(http.StatusUnauthorized, "error"))
工作正常。
但是,当访问未注册页面时出现恐慌 echo.Context is *echo.context, not *CustomContext
错误。
为什么访问找不到页面时出现紧急错误?
恐慌的直接原因是正在使用 "standard" 上下文调用错误处理程序。为了使您的类型断言安全,请使用双值形式:
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
}
}
但更一般地说,您正在做的事情(使用自定义上下文类型)可能不是一个好主意。如果您解释了您要实现的目标,可能会有更好、更可靠的方法来解决它。
一个明显的替代方案是使用标准的 Go 上下文,通过 c.Request().Context()
.