Node.js 在处理程序中引发错误时未调用onPostHandler扩展
我正在从hapi14升级到hapi17,当在处理程序内部抛出或返回错误时,onPostHandlers没有被调用,这在16或17中都没有被列为突破性的更改 我相信这是从回调更改为异步的结果,但我希望得到确认,或者找出在处理程序中抛出错误时阻止调用onPostHandler扩展的问题所在Node.js 在处理程序中引发错误时未调用onPostHandler扩展,node.js,hapijs,Node.js,Hapijs,我正在从hapi14升级到hapi17,当在处理程序内部抛出或返回错误时,onPostHandlers没有被调用,这在16或17中都没有被列为突破性的更改 我相信这是从回调更改为异步的结果,但我希望得到确认,或者找出在处理程序中抛出错误时阻止调用onPostHandler扩展的问题所在 const Boom = require('boom'); const extensions = { handleOnPostHandler: function (request, h) { con
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 });
};
我是否遗漏了一个严重的错误,或者这是预期的错误?因为您在请求结束之前抛出了一个错误?只要从处理程序返回,就会调用
handleOnPostHandler
名单上写着
路由处理程序
执行路由处理程序
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 });
};
onPostHandler
可以修改request.response中包含的响应(但不能
指定了一个新值)。返回不同的响应类型(对于
例如,用HTML响应替换错误),返回新的
响应值
但是您不允许处理程序移动到onPostHandler,您正在抛出一个错误。它接收响应。这是一个未记录的功能,在升级到>16时被删除,因此无法模拟此功能。如果返回Boom,您仍将跳过onPostHandler。这是我说的。不,不是。您说过要从处理程序返回,如果我返回一个错误,这就是我在本例中要做的,我无法访问onPostHandler。这在之前的Hapi14中是有效的。我有一个使用onPreResponse的解决方案,如果在几天内没有收到好的答案,我将使用它来回答这个问题