Подтвердить что ты не робот

Mongoose Пытаясь открыть закрытую связь

Это упрощенная версия проблемы, но в основном я пытаюсь открыть 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();

Любая идея, как заставить ее работать?

4b9b3361

Ответ 2

Чтобы добавить ответ Raghuveer:

Я бы также упомянул, что вместо непосредственного использования mongoose (вы, вероятно, используете его таким образом, чтобы вы попали в этот пост):

require('mongoose').model(...);

Вы должны использовать возвращаемое соединение:

var db = require('mongoose').connect('xxx', 'yyy');
db.model(...);

Ответ 3

Я получаю эту проблему во время выполнения моих тестов.

Это то, что я сделал для его решения.

//- 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
}

Ответ 4

У меня была проблема с 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...', () => {

       });
    });
});

Надеюсь, это поможет вам!

Ответ 5

Вы пытаетесь открыть соединение по умолчанию (которое еще не закрыто) во второй раз.

сделайте следующее вместо

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');

Ответ 6

Использование 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.