Ответ 1
connect()
открывает соединение по умолчанию с db. Поскольку вы хотите использовать два разных соединения, используйте createConnection()
.
Ссылка API: http://mongoosejs.com/docs/api.html#index_Mongoose-createConnection
Это упрощенная версия проблемы, но в основном я пытаюсь открыть 2 соединения mongodb с mongoose, и это дает мне "Попытка открыть закрытое соединение". ошибка.
Пример кода:
var db1 = require('mongoose');
db1.connect('my.db.ip.address', 'my-db');
var db2 = require('mongoose');
db2.connect('my.db.ip.address', 'my-db');
db2.connection.close();
db1.connection.close();
Любая идея, как заставить ее работать?
connect()
открывает соединение по умолчанию с db. Поскольку вы хотите использовать два разных соединения, используйте createConnection()
.
Ссылка API: http://mongoosejs.com/docs/api.html#index_Mongoose-createConnection
Чтобы добавить ответ Raghuveer:
Я бы также упомянул, что вместо непосредственного использования mongoose (вы, вероятно, используете его таким образом, чтобы вы попали в этот пост):
require('mongoose').model(...);
Вы должны использовать возвращаемое соединение:
var db = require('mongoose').connect('xxx', 'yyy');
db.model(...);
Я получаю эту проблему во время выполнения моих тестов.
Это то, что я сделал для его решения.
//- in my app.js file.
try {
mongoose.connect('mongodb://localhost/userApi2'); //- starting a db connection
}catch(err) {
mongoose.createConnection('mongodb://localhost/userApi2'); //- starting another db connection
}
У меня была проблема с unit test с mocha
.
Проблема возникла, когда я добавил второй тест, потому что beforeEach
вызывается дважды.
Я решил это с помощью этого кода:
const mongoose = require('mongoose');
describe('Your test suite', () => {
beforeEach( () => {
if (mongoose.connection.db) {
return; // or done();
} else {
// connect to mongodb
});
describe('GET /some-path', () => {
it('It should...', () => {
});
});
describe('POST /some-path', () => {
it('It should...', () => {
});
});
});
Надеюсь, это поможет вам!
Вы пытаетесь открыть соединение по умолчанию (которое еще не закрыто) во второй раз.
сделайте следующее вместо
var db = require('mongoose'); //note only one 'require' needed.
var connectionToDb1 = db.createConnection('my.db1.ip.address', 'my-db1');
var connectionToDb2 = db.createConnection('my.db2.ip.address', 'my-db2');
Использование mongoose.disconnect(fn):
mongoose.disconnect(() => {
// here it would be possible "reset" models to fix
// OverwriteModelError errors
mongoose.models = {};
// here comes your logic like registering Hapi plugins
server.register(somePlugin, callback);
});
Я нашел этот вопрос, набрав сообщение об ошибке, и несмотря на то, что моя проблема немного другая, я считаю, что это может быть полезно для тех, кто использует Hapi. Более конкретно Hapi + rest-hapi + mocha.
При запуске mocha
с опцией --watch
я столкнулся с обоими: OverwriteModelError
и Error: Trying to open unclosed connection errors
.