Resitify的集中错误处理

时间:2015-10-03 19:29:09

标签: javascript node.js restify

我在我的restify应用中设置集中式错误处理时遇到问题。我想捕获某些Mongo错误,例如" E11000重复键错误"然后将它们映射到一个解决冲突错误。

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

我认为我应该捕获InternalServerError,但下面的处理程序永远不会被调用:

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

我以为我可以使用快递方法:

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

但是,解决问题的处理程序似乎并没有采取错误的观点。在搜索了所有常见的地方之后我才难过。看来我的第一种方法应该有效。

1 个答案:

答案 0 :(得分:1)

这可能适合你。在app.js文件中设置一个bunyan记录器......

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