Javascript 调整大小的集中式错误处理
我在restify应用程序中设置集中错误处理时遇到问题。我想捕获某些Mongo错误,例如“E11000重复密钥错误”,然后将它们映射到restify ConflictError 如果我只是让Mongo调用中的错误在路由中冒泡出来,客户端将得到500个错误 我想我应该捕获InternalServerError,但以下处理程序从未被调用:Javascript 调整大小的集中式错误处理,javascript,node.js,restify,Javascript,Node.js,Restify,我在restify应用程序中设置集中错误处理时遇到问题。我想捕获某些Mongo错误,例如“E11000重复密钥错误”,然后将它们映射到restify ConflictError 如果我只是让Mongo调用中的错误在路由中冒泡出来,客户端将得到500个错误 我想我应该捕获InternalServerError,但以下处理程序从未被调用: app.on('InternalServerError', function (req, res, err, cb) { console.log('+++
app.on('InternalServerError', function (req, res, err, cb) {
console.log('++++++++++++++++', err);
return cb(err);
});
我想我可以使用快速方法:
app.use(function (err, req, res, next){...
但是restify处理程序似乎不接受错误参数。在搜索了所有平常的地方后,我被难住了。看来我的第一种方法应该已经奏效了。这可能适合你。在app.js文件中设置一个班扬记录器
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();
}
我想要避免的就是锅炉板,在每个控制器上都会被卡住。你会以为我们在写java!无论如何,谢谢你。