Расширение onPostHandler не вызывается при возникновении ошибки в обработчике - PullRequest
0 голосов
/ 13 февраля 2019

Я обновляюсь с hapi14 до hapi17, когда выдается или возвращается ошибка внутри обработчика, onPostHandlers не вызываются, это не указано как критическое изменение ни в 16, ни в 17.

Я считаю, что этоявляется результатом перехода от обратных вызовов к асинхронному, но я хотел бы получить его подтверждение или выяснить, в чем проблема, которая препятствует вызову расширения onPostHandler в случае возникновения ошибки в обработчике.

const Boom = require('boom');

const extensions = {
  handleOnPostHandler: function (request, h) {
    console.log('we hit it wooo');
    return h.continue;
  }
};

const operations = {
  error: {
    description: 'Endpoint that simulates errors',
    auth: false,
    handler: function (request, h) {
      // comment me out to call the onPostHandler
      throw new Boom('an error');

      // uncomment me to call the onPostHandler
      // return 'potato';
    }
  }
};

exports.register = function (server) {
  server.ext('onPostHandler', extensions.handleOnPostHandler);
  server.route({ method: 'GET', path: '/debug/error', config: operations.error });
};

Есть грубая ошибка, которую я пропускаю, или это ожидается?

1 Ответ

0 голосов
/ 14 февраля 2019

потому что вы выкидываете ошибку до того, как запрос закончится?Просто вернитесь из вашего обработчика, тогда будет вызван ваш handleOnPostHandler.

В списке методов жизненного цикла написано

Обработчик маршрута

выполняет обработчик маршрута.

onPostHandler

ответ, содержащийся в request.response, может быть изменен (но ему не может быть присвоено новое значение).Чтобы возвратить другой тип ответа (например, замените ошибку HTML-ответом), верните новое значение ответа.

Но вы не разрешаете своему обработчику переходить на onPostHandler, вывыдают ошибку.Получает ответ.

...