在Node.js中连接MongoDB不能在for循环中工作

我有一个连接我的本地mongoDB数据库的函数,但是当我尝试把它放在一个for循环中时,连接突然不起作用。

var connectMongo = require("./ConnectToMongoDB"); var insertDocument = require("./InsertDocument"); function spamMongoDBtest(){ process.nextTick(function(){ var max = 500; for(var i = 0; i<max;i++){ setTimeout(function(){ connectMongo(insertDocument); }, 50); } }); } 

为什么我得到这个AssertionError:

AssertionError:null == {[MongoError:connect ECONNREFUSED] name:'MongoError',message:'connect ECONNREFUSED}}

connectMongo(insertDocument); 是否在这个function工作:

 function spamMongoDB(){ process.nextTick(function(){ setInterval(function(){connectMongo(insertDocument); }, 100); }); } 

你还可以分享connectMongoinsertDocument函数吗? 也许你有太多与Mongo的开放连接。 尝试在每次写入文档后closures与Mongo的连接。

您可以使用async库来限制testing的并发性。

例如:

 var concurrency = 25; //limit to 25 concurrent connections async.eachLimit(new Array(500), concurrency, function(item, callback) { connectMongo(function(){ insertDocument(); callback(); }); }); 

您正在从MongoDb获得连接错误,因为您正尝试连接到数据库多次。 您只需连接到数据库一次,从那一刻起,如果连接已经build立,则与数据库的通信将被打开。

您正在打开连接,一旦打开,您可以与数据库进行通信。

 var mongoURI = "mongodb://localhost:3030/"; var MongoDB = mongoose.connect(mongoURI).connection; MongoDB.on('error', function(err) { console.log(err.message); }); MongoDB.once('open', function() { console.log("mongodb connection open"); insertDocument; }); 

open函数里面你可以触发setInterval 。 或者如果你想坚持使用你的代码,每次你在for循环中打开一个连接,你也必须closures它。 我不知道什么connectMongo方法包含,但是你调用setTimeout方法之外的这个方法之后,你必须closures连接。 但是这个方法无论如何都会给服务器带来沉重的负担,所以我的build议是遵循所提供的方法。