处理程序中抛出错误时未调用onPostHandler扩展名
我正在从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 });
};
我错过了一个严重的错误,或者这是预期的?
回答如下:因为你在请求结束前抛出一个错误?只需从您的处理程序返回,然后将调用您的handleOnPostHandler
。
在life cycle methods的名单上,它说
路线交易
执行路由处理程序。
onPostHandler
request.response中包含的响应可能会被修改(但不会分配新值)。要返回不同的响应类型(例如,使用HTML响应替换错误),请返回新的响应值。
但是你不允许你的处理程序转移到onPostHandler,你会抛出一个错误。它接管了回应。