web-dev-qa-db-fra.com

Pourquoi le message d'erreur "J'essaye d'ouvrir une connexion non fermée." S'affiche-t-il?

J'essaie de connecter mon application de nœud à mongodb via mangouste. Cela semble fonctionner, car je peux ajouter des documents, mais j'obtiens l'erreur { [Error: Trying to open unclosed connection.] state: 2 }.

J'ai créé une application très simple, juste pour m'assurer que tout fonctionne correctement avant de connecter mon application réelle.

Voici mon application simple:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var timeSchema = new Schema({ timestamp: String });
var Time = mongoose.model('Time', timeSchema);

mongoose.connect('mongodb://localhost/mydb');

var db = mongoose.connection;

db.on('error', console.error.bind(console, 'connection error: '));
db.once('open', function () {

  var testA = new Test({ timestamp: Date() });

});

J'ai également essayé d'ajouter db.close() à la fin, mais cela n'a fait aucune différence.

Cela fonctionne sur un VPS Ubuntu 14.04 avec:

  • Node.js v0.10.3
  • MongoDB 2.6.3
  • Mangouste 1.4.21
33
Hal Carleton

À mon avis, vous essayez de créer une autre connexion sans fermer la connexion actuelle. Donc, vous voudrez peut-être utiliser:

createConnection () au lieu de connect().

Dans votre cas, cela ressemblerait à ceci:

db = mongoose.createConnection('mongodb://localhost/mydb');
59
lvarayut

J'ai eu le même problème et j'ai constaté que j'avais la connexion ci-dessous dans un autre fichier, ce qui était la raison pour laquelle je ne pouvais pas me connecter avec un nom de base de données différent. Le createConnection ci-dessous est nécessaire:

db = mongoose.createConnection('mongodb://localhost/mydb');

Ce que j'avais dans un autre fichier:

db = mongoose.Connection('mongodb://localhost/mydb');
5
Prolasis

utilisez simplement mongoose.connect('...');ne fois.

peut-être dans votre fichier racine app.js ou index.js, pas dans tous les fichiers liés au modèle ou à la base de données si vous les importez (y compris).

Quoi qu'il en soit, si vous avez encore des doutes, vous pouvez le vérifier en:

var mongoose = require('mongoose'); 
var db = mongoose.connection;

db.once('connected', function() {
  console.log('mongoDB is connected');
});
2
Mehdi Raash

J'ai eu le même problème, mais c'était dû à une faute de frappe:

express-sessions au lieu de express-session

0
King Obi

ne devrait pas votre

db.once('open', function () {

  var testA = new Test({ timestamp: Date() });

});

être

db.once('open', function () {

  var testA = new Time({ timestamp: Date() });

});

Si "Test" est un schéma différent basé sur une connexion différente, cela pourrait affecter je pense

0
Martian2049