[英]Functionall approach to error handling
我在这里找到了这个片段: http : //www.nodewiz.biz/nodejs-error-handling-pattern/
它应该比node.js中的正常方式更好地处理错误。 但我不明白它是如何工作的以及为什么它比普通if(err)
更好 ?
功能方法
使用Express.js feramework的示例,定义一个返回错误处理程序的函数:
function error(res,next) {
return function( err, result ) {
if( err ) {
res.writeHead(500); res.end(); console.log(err);
}
else {
next(result)
}
}
}
这允许你这样做;
app.get('/foo', function(req,res) {
db.query('sql', error(res, function(result) {
// use result
}));
});
仅作为示例介绍此方法,请不要将此方法用于生产代码,除非您实际正确处理错误。
“它应该比node.js中的正常方式更好地处理错误。但我不明白它是如何工作的......”
它是如何工作的,它接收res
对象和一个函数(由你提供),如果结果成功则调用它。
然后它返回一个作为回调传递给db.query()
的函数。 这样回调实际上会收到err
和result
。
如果发现err
,它会处理为您发送适当的500
响应。 如果没有找到错误,它会调用您提供的函数并将result
传递给它。 这样你知道如果你提供的功能运行,那是因为没有错误。
“......为什么它比普通的(错误的)更好?”
这不是更好。 这是不同的。 如果错误处理总是相同的,你可以在一个地方更新它,这是很好的,任何使用它的代码都将从更新中受益。
但是,简单的函数抽象也可以这样做。
function error(res, err) {
if( err ) {
res.writeHead(500); res.end(); console.log(err);
return true
}
return false
}
这允许你这样做;
app.get('/foo', function(req,res) {
db.query('sql', function(err, result) {
if (error(res, err))
return;
// use the result
}));
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.