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?
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
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
}
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!
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(...);
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');
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
.