在Restify中的res.send()事件之后?

时间:2015-03-02 22:05:05

标签: node.js restify bugsnag

我正在尝试将Bugsnag添加到我的Node Restify服务中。我们已经有很多路由了,所以我试图不在我们的代码库中添加Bugsnag调用,而且我也尝试做一些全局的事情,所以从来没有错误,dev会忘记添加错误报告。< / p>

从概念上讲,我希望在任何res.send()之后获取状态代码。如果statusCode是> = 400,我想通过调用Bugsnag.notify来通知Bugsnag。我已经检查过各处的错误,所以没有任何错误出现在客户端(浏览器,电话等),但它们确实被发送,例如,res.send(401, { message: 'You dont have permission to do that' })我希望能够挂钩并通过谁试图这样做,什么路线,等等。问题是我无法让after事件发生:

server.on('after', function (req, res, route, error) {
  console.log('AFTER')
});

我想我误解了after的用途。在定义任何路由或其他中间件(index.js)之前,它位于server.use的顶部。

我的通用代码结构类似于:

  server.post('/foo', function (req, res, next) {
    FooPolicy.create(req, function (err) {
      if (err) return res.send(err.code, err.data);
      FooController.create(req.params, function (response) {
        res.send(response.code, response.data)
        next();
      });
    });
  });

FooPolicy ==检查权限
FooController ==实际创建模型/数据

1 个答案:

答案 0 :(得分:1)

问题是after事件当前被视为与任何其他处理程序一样。这意味着如果您未在每个代码路径中调用next,则永远不会发出after事件。

与此同时,添加下一个调用将导致您的after事件处理程序触发。

if (err) {
  res.send(err.code, err.data);
  next();
  return;
}