我正在尝试将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 ==实际创建模型/数据
答案 0 :(得分:1)
问题是after
事件当前被视为与任何其他处理程序一样。这意味着如果您未在每个代码路径中调用next
,则永远不会发出after
事件。
与此同时,添加下一个调用将导致您的after
事件处理程序触发。
if (err) {
res.send(err.code, err.data);
next();
return;
}