function全面的error handling方法

我在这里find这个片段: http : //www.nodewiz.biz/nodejs-error-handling-pattern/

它应该比node.js中的正常方式更好地处理错误。 但是我不明白它是如何工作的,为什么它if(err) 更好


function方法

使用Express.js框架的示例定义一个返回error handling函数的函数:

 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()的函数作为callback函数。 所以callback实际上收到errresult

如果发现err ,它会为您发送相应的500响应。 如果没有find错误,它会调用你提供的函数来传递result 。 这样你就知道如果你提供的函数运行,那是因为没有错误。


“……为什么如果(err)比平原更好?”

这不是更好。 这是不一样的。 如果error handling总是相同的,那么你可以在一个地方进行更新,并且任何使用它的代码都将从这个更新中受益。

但是,一个简单的函数抽象可以做同样的事情。

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