Javascript 在Node.js中连接MongoDB不在for循环中工作
我有一个连接本地mongoDB数据库的函数,但是当我尝试将它放入for循环时,连接突然不起作用Javascript 在Node.js中连接MongoDB不在for循环中工作,javascript,node.js,mongodb,asynchronous,Javascript,Node.js,Mongodb,Asynchronous,我有一个连接本地mongoDB数据库的函数,但是当我尝试将它放入for循环时,连接突然不起作用 var connectMongo = require("./ConnectToMongoDB"); var insertDocument = require("./InsertDocument"); function spamMongoDBtest(){ process.nextTick(function(){ var max = 500;
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);
}
});
}
您是否也可以共享
connectMongo
和insertDocument
功能?
也许您与Mongo的开放连接太多了。每次编写文档后,请尝试关闭与Mongo的连接
您可以使用async
库来限制测试的并发性
例如:
var concurrency = 25; //limit to 25 concurrent connections
async.eachLimit(new Array(500), concurrency, function(item, callback) {
connectMongo(function(){
insertDocument();
callback();
});
});
您从MongoDb收到连接错误,因为您尝试多次连接到数据库。您只需要连接到数据库一次,从那一刻起,如果已建立连接,则与数据库的通信将打开 您正在打开连接,一旦打开,就可以与数据库通信
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循环中打开连接时,您也必须关闭它。我不知道connectMongo
方法包含什么,但在setTimeout
方法之外调用此方法后,必须关闭连接。但无论如何,这种方法都会给服务器带来沉重的负担,因此我的建议是遵循提供的方法
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;
});