2

我正在尝试将 Bugsnag 添加到我的 Node Restify 服务中。我们已经有大量的路线,所以我尽量不在我们的代码库中添加 Bugsnag 调用,而且我也在尝试做一些全局的事情,这样开发人员就不会忘记添加错误报告。

从概念上讲,我想any之后res.send()获得状态码。如果 statusCode >=400 我想通过调用来通知 Bugsnag Bugsnag.notify。我已经在各处检查错误,因此客户端(浏览器、电话等)不会出现任何错误,但它们确实会被发送,例如,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 == 实际创建模型/数据

4

1 回答 1

1

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

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

if (err) {
  res.send(err.code, err.data);
  next();
  return;
}
于 2016-02-10T16:26:14.117 回答