web-dev-qa-db-fra.com

Mongoose Essayer d'ouvrir une connexion non fermée

Ceci est une version simplifiée du problème, mais au fond, j'essaie d'ouvrir 2 connexions mongodb avec mangouste et cela me donne "Essayer d'ouvrir une connexion non fermée". Erreur.

Exemple de code:

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

Une idée comment le faire fonctionner?

38
Ben Wong

connect() ouvre la connexion par défaut à la base de données. Puisque vous voulez deux connexions différentes, utilisez createConnection().

Lien API: http://mongoosejs.com/docs/api.html#index_Mongoose-createConnection

45
Raghuveer

Je reçois ce problème lors de l'exécution de mes tests.

C'est ce que j'ai fait pour le résoudre.

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

2
ArchNoob

J'ai eu ce problème en faisant des tests unitaires avec mocha.

Le problème est venu lorsque j'ai ajouté un deuxième test car beforeEach est appelé deux fois.

J'ai résolu ceci avec ce code:

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...', () => {

       });
    });
});

J'espère que ça vous aide!

2
slorenzo

Pour ajouter une réponse à Raghuveer:

Je voudrais également mentionner qu'au lieu d'utiliser directement la mangouste (vous l'utilisez probablement de cette façon, vous vous retrouvez sur ce post):

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

Vous utiliseriez la connexion retournée:

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

Vous essayez d'ouvrir la connexion par défaut (qui n'est pas encore fermée) une deuxième fois.

faites ce qui suit à la place

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');
0
Edwin Ikechukwu

Utilisation de 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);
});

J'ai trouvé cette question en tapant le message d'erreur et malgré mon problème, c'est un peu différent, je pense que cela pourrait être utile pour ceux qui utilisent Hapi Plus précisément Hapi + reste-hapi + moka .

Lors de l'exécution de mocha avec l'option --watch, je faisais face à la fois à OverwriteModelError et Error: Trying to open unclosed connection errors.

0
Moacir Rosa