對於一個項目,我需要做一些查詢一些的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