对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(); }