Question

J'utilise mangouste dans un script qui ne vise pas à fonctionner de façon continue, et je suis face à ce qui semble être une question très simple, mais je ne peux pas trouver une réponse; il suffit de mettre une fois que je fais un appel à une fonction mangouste qui envoie des demandes de MongoDB mon nodejs instance et je dois le tuer manuellement, par exemple arrête jamais, Ctrl + c ou Program.exit ().

Le code ressemble à peu près comme ceci:

var mongoose = require('mongoose');

// if my program ends after this line, it shuts down as expected, my guess is that the connection is not really done here but only on the first real request ?
mongoose.connect('mongodb://localhost:27017/somedb'); 

// define some models

// if I include this line for example, node never stop afterwards
var MyModel =  mongoose.model('MyModel', MySchema);

J'ai essayé d'ajouter des appels à mongoose.disconnect () mais pas pour résultat. Mis à part cela, tout fonctionne bien (conclusion, économie, ...).

est que cette personne exactement le même problème, malheureusement, il n'a reçu aucune réponse: https : //groups.google.com/group/mongoose-orm/browse_thread/thread/c72cc1c51c76e661

Merci

EDIT: a accepté la réponse ci-dessous car il est techniquement correct, mais si quelqu'un a déjà frappé ce problème encore une fois, il semble que mangouste et / ou le pilote mongodb ne fait fermer la connexion lorsque vous lui demandez s'il y a encore des requêtes en cours d'exécution.

Il ne se rappelle même pas l'appel déconnexion du tout, il ne fait pas une fois les requêtes en cours d'exécution terminée; juste rejets votre appel sans exception jeté ou quelque chose du genre, et n'a jamais fait fermer la connexion.

Alors là vous l'avez:. Assurez-vous que chaque requête a été traitée avant d'appeler disconnect () si vous voulez qu'il fait le travail

Était-ce utile?

La solution

Vous pouvez fermer la connexion avec

mongoose.connection.close()

Autres conseils

L'autre réponse ne fonctionne pas pour moi. Je devais utiliser mongoose.disconnect(); comme indiqué dans cette réponse .

Vous pouvez définir la connexion à une variable puis le déconnecter lorsque vous avez terminé:

var db = mongoose.connect('mongodb://localhost:27017/somedb');

// Do some stuff

db.disconnect();

J'utilise la version 4.4.2 et aucun des autres réponses travaillé pour moi. Mais l'ajout useMongoClient aux options et de le mettre dans une variable que vous appelez close semblait sur le travail.

var db = mongoose.connect('mongodb://localhost:27017/somedb', { useMongoClient: true })

//do stuff

db.close()

Vous obtiendrez une erreur si vous essayez de fermer / déconnexion à l'extérieur de la méthode. La meilleure solution est de fermer la connexion dans les deux callbacks dans la méthode. Le code fictif est ici.

const newTodo = new Todo({text:'cook dinner'});

newTodo.save().then((docs) => {
  console.log('todo saved',docs);
  mongoose.connection.close();
},(e) => {
  console.log('unable to save');
});

Vous avez probablement ceci:

const db = mongoose.connect('mongodb://localhost:27017/db');

// Do some stuff

db.disconnect();

mais vous pouvez aussi avoir quelque chose comme ceci:

mongoose.connect('mongodb://localhost:27017/db');

const model = mongoose.model('Model', ModelSchema);

model.find().then(doc => {
  console.log(doc);
}

vous ne pouvez pas appeler db.disconnect() mais vous pouvez fermer la connexion après l'avoir utilisé.

model.find().then(doc => {
  console.log(doc);
}).then(() => {
  mongoose.connection.close();
});
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top