1

覆盖时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。

如果有办法在中间件中映射错误,我很好。

4

0 回答 0