Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 在处理程序中引发错误时未调用onPostHandler扩展_Node.js_Hapijs - Fatal编程技术网

Node.js 在处理程序中引发错误时未调用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

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

名单上写着

路由处理程序

执行路由处理程序

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的解决方案,如果在几天内没有收到好的答案,我将使用它来回答这个问题