Как переопределить сообщение формата DefaultHTTPErrorHandler - PullRequest
0 голосов
/ 04 апреля 2019

Я использую инфраструктуру Echo.

Как я могу изменить ответ этого формата на свой собственный формат, его ошибка из библиотеки JWT https://github.com/dgrijalva/jwt-go

{
  "message": "invalid or expired jwt"
}

Я хочу что-то изменитькак это

{
  "meta": {
    "status": false,
    "message": "Unauthorized",
    "messages": null
  },
  "result": null
}

я не могу найти, как это сделать, чтобы переопределить DefaultHTTPErrorHandler

этот customHttpErrorHandler

    e := echo.New()
    e.HTTPErrorHandler = func(err error, c echo.Context) {
        var (
            code = http.StatusInternalServerError
            msg  interface{}
        )

        type (
            Map map[string]interface{}
        )

        if he, ok := err.(*echo.HTTPError); ok {
            code = he.Code
            msg = he.Message
            if he.Internal != nil {
                err = fmt.Errorf("%v, %v", err, he.Internal)
            }
        } else if e.Debug {
            msg = err.Error()
        } else {
            msg = http.StatusText(code)
        }

        if _, ok := msg.(string); ok {
            msg = Map{"sempak": msg}
        }

        // Send response
        if !c.Response().Committed {
            if c.Request().Method == http.MethodHead {
                err = c.NoContent(code)
            } else {
                err = c.JSON(code, msg)
            }
            if err != nil {
                e.Logger.Error(err)
            }
        }
    }

1 Ответ

1 голос
/ 04 апреля 2019

Сначала нужно отловить ошибку из библиотеки JWT . Здесь вы можете найти пример (ExampleParse_errorChecking), как это сделать.

Когда вы знаете ошибку, вы можете вернуть свой пользовательский ответ или используйте Пользовательский обработчик ошибок HTTP подробности здесь

Пользовательский HTTP-обработчик ошибок может быть установлен через e.HTTPErrorHandler

func customHTTPErrorHandler(err error, c echo.Context) {
    // ...
}

e.HTTPErrorHandler = customHTTPErrorHandler
...