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实际上收到err
和result
。
如果发现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 })); });