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:
À 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');
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');
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');
});
J'ai eu le même problème, mais c'était dû à une faute de frappe:
express-sessions
au lieu de express-session
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