Для проекта мне нужно переключиться между некоторыми базами данных MongoDB для выполнения некоторых запросов.Mongoose как подключиться ко многим базам данных
Я нашел несколько Exemple как один на один: 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
В случае цикла цикла, когда внутренний код является асинхронным, цикл будет выполняться первым, тогда код внутри него будет выполняться. Таким образом, внутренний код получит в этом случае значение 2 (пример выше). Но в случае цикла forEach этого не произойдет. Я запустил код OP, а также свой собственный код. Я прошу вас запустить код, который вы также получите. Спасибо. –
ОК, это исправит общую переменную 'conn', но не устраняет ошибки' 'uns connect '. Это происходит из-за того, что все 1000 из этих пулов соединений открываются в синхронном цикле. Для борьбы с этим требуется некоторое управление потоком асинхронного потока. – JohnnyHK