覆盖时HTTPErrorHandler
,我观察到状态代码 200 被发送给用户,即使我将响应状态设置为不同的值:
package main
import (
"github.com/labstack/echo/v4"
"net/http"
)
type MyError struct{}
func (m *MyError) Error() string {
return "boom"
}
func main() {
e := echo.New()
e.HTTPErrorHandler = func(err error, context echo.Context) {
if _, ok := err.(* MyError); ok {
println("Got MyError")
context.SetResponse(&echo.Response{Status: http.StatusBadRequest})
} else {
println("Got something else")
}
}
e.GET("/1", func(context echo.Context) error {
return &MyError{}
})
e.GET("/2", func(context echo.Context) error {
return echo.NewHTTPError(http.StatusForbidden, "Invalid permissions ")
})
e.Start(":80")
}
在上面的示例中,请求/1
或者/2
总是返回 200。如果我注释掉对 的覆盖HTTPErrorHandler
,我将分别返回状态 500 和 403。因此,似乎覆盖HTTPErrorHandler
将所有状态更改为 200。
如果有办法在中间件中映射错误,我很好。