我正在从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 });
};
我是否遗漏了严重错误,或者这是预期的?
答案 0 :(得分:0)
这是一个未记录的功能,已在Hapi6中删除,因此,当升级到> 16时,无法模拟此功能。
答案 1 :(得分:-1)
因为在请求结束之前引发了错误?只需从您的处理程序返回,即可调用您的handleOnPostHandler
。
在life cycle methods的列表上,
路由处理程序
执行路由处理程序。
onPostHandler
request.response中包含的响应可以修改(但不能 分配了一个新值)。要返回其他响应类型(对于 例如,用HTML响应替换错误),返回一个新的 响应值。
但是您不允许您的处理程序继续使用onPostHandler,而是引发错误。它接管了响应。