2015-03-02 51 views
2

我正在尝试将Bugsnag添加到我的Node Restify服务中。我们已经有很多路线了,所以我试图不在我们的代码库中添加Bugsnag调用,而且我也在尝试做一些全局的事情,所以开发人员忘记添加错误报告时从来没有犯过错误。Restify中的res.send()事件之后?

从概念上说,我想要任何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是。在定义任何路由或其他中间件(server.use)之前,它位于我的index.js的顶部。

我一般的代码结构看起来是这样的:

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

的问题是,after事件目前正在等处理任何其他处理器。这意味着如果您在每个代码路径中都不拨打next,那么将永远不会发射该事件。

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

if (err) { 
    res.send(err.code, err.data); 
    next(); 
    return; 
} 
相关问题