处理程序中引发错误时,不会调用onPostHandler扩展

时间:2019-02-13 10:14:00

标签: node.js hapijs

我正在从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 });
};

我是否遗漏了严重错误,或者这是预期的?

2 个答案:

答案 0 :(得分:0)

这是一个未记录的功能,已在Hapi6中删除,因此,当升级到> 16时,无法模拟此功能。

答案 1 :(得分:-1)

因为在请求结束之前引发了错误?只需从您的处理程序返回,即可调用您的handleOnPostHandler

life cycle methods的列表上,

  

路由处理程序

     
    

执行路由处理程序。

  
     

onPostHandler

     
    

request.response中包含的响应可以修改(但不能     分配了一个新值)。要返回其他响应类型(对于     例如,用HTML响应替换错误),返回一个新的     响应值。

  

但是您不允许您的处理程序继续使用onPostHandler,而是引发错误。它接管了响应。