对于一个项目,我需要做一些查询一些的MongoDB数据库之间进行切换。猫鼬如何连接到许多数据库
我发现了一些为例这样的一个:Mongoose and multiple database in single node.js project
他的答案是完美的工作,但现在我试图做一个循环,unfortunally它不工作,我得到这个错误:
events.js:72
throw er; // Unhandled 'error' event
^
Error: failed to connect to [localhost:27017]
at null.<anonymous> (/home/user/test_many_db_mongodb/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/server.js:549:74)
at EventEmitter.emit (events.js:106:17)
at null.<anonymous> (/home/user/test_many_db_mongodb/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/connection_pool.js:150:15)
at EventEmitter.emit (events.js:98:17)
at Socket.<anonymous> (/home/user/test_many_db_mongodb/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/connection.js:533:10)
at Socket.EventEmitter.emit (events.js:95:17)
at net.js:440:14
at process._tickCallback (node.js:419:13)
而且我不明白为什么我得到这个错误,如果在上述工作的链接的例子我的代码也应该这么做:
var mongoose = require('mongoose');
for (var i = 0; i != 1000; i++) {
var conn = mongoose.createConnection('mongodb://localhost/test' + i);
conn.on('connected', function() {
console.log('Mongoose connected to database');
var Model = conn.model('Model', new mongoose.Schema({
title : { type : String, default : 'model in test database' }
}));
var newModelA = new Model();
newModelA.save(function(err) {
if (err)
console.log(err);
console.log('save A');
});
});
}
感谢您的帮助。
'forEach'是同步的,所以这会表现得一样的OP代码。 – JohnnyHK 2014-11-10 16:33:43
如果for循环的内部代码是异步的,则循环将首先执行,然后其中的代码将执行。所以,在这种情况下,内部代码将得到2的值(上面的例子)。但是在forEach循环中它不会发生。我已经运行OP的代码以及我自己的代码。我请求你运行代码,你也会得到不同的结果。谢谢。 – 2014-11-10 17:57:47
好的,这将解决共享的'conn'变量问题,但它不能解决OP的'失败连接'错误。这是因为所有这些连接池都在同步循环中打开。需要一些异步流量控制来解决这个问题。 – JohnnyHK 2014-11-10 18:36:06