Могу ли я изменить statusCode на код ошибки Boom? - PullRequest
0 голосов
/ 15 февраля 2019

Я делаю API и на полезную нагрузку ошибки Boom, например, я получаю следующие ответы:

{
    "statusCode": 405,
    "error": "Method Not Allowed",
    "message": "Method Not Allowed"
}

Но на другом используемом API, statusCodeполе должно быть переименовано просто в code, поэтому ответ будет выглядеть следующим образом:

{
    "code": 405,
    "error": "Method Not Allowed",
    "message": "Method Not Allowed"
}

Я хотел бы знать, возможно ли это сделать на Boom или есть ли другой способ сделатьэто.

Ответы [ 2 ]

0 голосов
/ 24 июля 2019

Решение, которое я нашел, состояло в том, чтобы создать обработчик ошибок, который заменяет свойство statusCode в прототипе Error.Теперь это выглядит так:

async function errorHandler (
    request: Hapi.Request,
    h: Hapi.ResponseToolkit) {
        if (request.response instanceof Error) {
            Object.defineProperty(request.response.output.payload, 'code',
            Object.getOwnPropertyDescriptor(request.response.output.payload, 'statusCode'));

            delete request.response.output.payload.statusCode;
        }
        return h.continue;
}
0 голосов
/ 01 марта 2019

Я не нашел способа переименовать statusCode в code в библиотеке boom.

Один из способов добиться того, чего вы хотите, - написать небольшое расширение сервера, чтобы захватить объект boom и вернутьпользовательская ошибка полезной нагрузки.С другой стороны, вы потеряете сам объект Boom.

server.ext('onPreResponse', (request, h) => {
    const response = request.response;
    if (!response.isBoom) {
      return h.continue;
    }

    const renameProp = (cProp, nProp, { [cProp]: cValue, ...rest }) => ({
      [nProp]: cValue,
      ...rest,
    });

    return h
      .response(renameProp('statusCode', 'code', response.output.payload))
      .code(response.output.statusCode);
  });

Hapi Docs - Как реализовать расширение сервера

...