对Resitify进行集中式error handling

我无法在我的restify应用程序中设置集中的error handling。 我想要捕获某些Mongo错误,如“E11000重复键错误”,然后将其映射到RestiftError。

如果我只是让路由中的Mongo呼叫出现错误,客户端会收到500错误。

我想我应该陷入InternalServerError,但下面的处理程序永远不会被调用:

app.on('InternalServerError', function (req, res, err, cb) { console.log('++++++++++++++++', err); return cb(err); }); 

我以为我可以使用快速的方法:

 app.use(function (err, req, res, next){... 

但是重新分配处理程序似乎没有错误的参数。 search了所有常见的地方后,我很难过。 看来我的第一个方法应该是刚刚工作。

这可能适合你。 在你的app.js文件中设置一个bunyanlogging器…

 var bunyan = require('bunyan'); var log = new bunyan({ name: 'my_api', streams: [ { path: './error.log', level: 'warn' } ], serializers: {req: restify.bunyan.serializers.req}, src: false }); var server = restify.createServer({ log: log }); 

然后在你的控制器做这样的事情…。

 var restify = require('restify'); try { Model.findAll().then(function(vals){ res.send(vals); next(); }); } catch(e) { req.log.error({req_id: req.id()}, 'Error attempting find.'); res.send(409, new restify.ConflictError("Problem executing search.")); next(); }