Node.js正确的callback错误句柄

让我们看看下面的代码:

mongodb.js

var mongo = require('mongodb') , mongodb = module.exports; mongodb.database = function(key, dbName, dbServer, callback){ var db = new mongo.Db(dbName, dbServer); db.open(function(error, connection){ // 5 if(error){ // 1 throw error; } return callback(null, connection); }); }; mongodb.collection = function(dbKey, collName, callback){ mongodb.database(dbKey, function(error, connection){ connection.collection(collName, function(error, collection){ // 2 if(error){ // 3 throw error; } return callback(null, collection); }); }); } 

model.js

 var db = require('./mongodb.js'); var model = module.exports; model.test = function(callback){ db.collection('users', function(error, collection){ // 4 // do something. }); } 

我的问题是,为什么我们总是做一个callback通过时的“错误,资源”,因为,看看1

我们正在处理的错误,所以它甚至不能达到2 *

34一样,它们将始终为NULL,因为错误是在不同的层上处理的。 现在为什么我不能在5

 db.open(function(error, connection){ if(error){ // 1 return errorHandler(error); } return callback(collection); }); 

errorHandler函数将是一个处理重大错误的函数,所以我们不必在每一层都使用它们,例如mongodb.findOne也是如此,为什么我们在传递callback函数时必须处理错误?

我主要使用callback(error,result)模式,当错误不被抛出任何地方(或catched)。 即你不想因为缺less一些参数而停止你的应用程序。 看下面的代码:

 function somethingAsync (options, callback) { if (!options || !options.name) { callback('no name specified'); //we dont want to kill the Application return; }; doSomeThingInternal(callback); }; 

在消费者方面,您可以通过任何内部函数将错误打印到客户端。

 somethingAsync(null, function (err,res)) { if(err) { console.log('error occured: ' + err); }; };