我是一个绝对的初学者的NodeJS并希望创建一个简单的REST的web服务与快递和猫鼬。
最新最好的做法来处理猫鼬的错误,在一个集中的地方?
当任何地方发生的数据库错误我想用一个错误信息返回一个Http-500-错误页:
if(error) {
res.writeHead(500, {'Content-Type': 'application/json'});
res.write('{error: "' + error + '"}');
res.end();
}
在旧的辅导http://blog-next-stage.learnboost.com/mongoose/我读到一个全局错误监听器:
Mongoose.addListener('error',function(errObj,scope_of_error));
但是,这似乎并没有工作,我无法找到的东西官方文档猫鼬这个监听器。 难道我每次Mongo的请求后,检查是否存在错误?
如果您使用快递,错误通常可以直接在您的路线或建立在猫鼬之上的API中处理,一起转发错误next
。
app.get('/tickets', function (req, res, next) {
PlaneTickets.find({}, function (err, tickets) {
if (err) return next(err);
// or if no tickets are found maybe
if (0 === tickets.length) return next(new NotFoundError));
...
})
})
该NotFoundError
可以在被嗅探的错误处理中间件提供量身定制的消息。
有些抽象是可能的,但你仍然需要访问到next
方法,以通过降低错误的路线链。
PlaneTickets.search(term, next, function (tickets) {
// i don't like this b/c it hides whats going on and changes the (err, result) callback convention of node
})
至于集中处理猫鼬错误,那里有没有真正一个地方处理他们所有。 错误可以在几个不同的层次来处理:
connection
错误发出的上connection
您的模型正在使用,所以
mongoose.connect(..);
mongoose.connection.on('error', handler);
// or if using separate connections
var conn = mongoose.createConnection(..);
conn.on('error', handler);
对于典型的查询/更新/删除错误传递给你的回调。
PlaneTickets.find({..}, function (err, tickets) {
if (err) ...
如果不传递一个回调发射模型上的错误,如果你在听吧:
PlaneTickets.on('error', handler); // note the loss of access to the `next` method from the request!
ticket.save(); // no callback passed
如果不传递回调,而不是听的误差model
水平,他们将在模型上发出的connection
。
关键外卖这里是你希望获得next
以某种方式传递下去的错误。