[英]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.