J'utilise mangouste dans un script qui n'est pas destiné à fonctionner en continu, et je suis confronté à ce qui semble être un problème très simple mais je ne trouve pas de réponse; simplement une fois que je fais un appel à n'importe quelle fonction mangouste qui envoie des requêtes à mongodb, mon instance nodejs ne s'arrête jamais et je dois la tuer manuellement avec, disons, Ctrl + c ou Program.exit ().
Le code ressemble à peu près à 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 aucun résultat. A part ça, tout fonctionne bien (recherche, sauvegarde, ...).
C'est exactement le même problème que cette personne, 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 elle est techniquement correcte, mais si quelqu'un rencontre à nouveau ce problème, il semble que mangouste et / ou le pilote mongodb ne ferme pas réellement la connexion lorsque vous lui demandez si des requêtes sont toujours en cours d'exécution.
Il ne se souvient même pas du tout de l'appel de déconnexion, il ne le fait pas une fois les requêtes terminées; il rejette simplement votre appel sans aucune exception lancée ou quoi que ce soit de ce genre, et ne ferme jamais réellement la connexion.
Donc là vous l'avez: assurez-vous que chaque requête a été traitée avant d'appeler disconnect () si vous voulez que cela fonctionne réellement.
Réponses:
Vous pouvez fermer la connexion avec
la source
Connection.close()
méthode est uniquement exportée, uniquement disponible, alors utilisez-la.L'autre réponse n'a pas fonctionné pour moi. J'ai dû utiliser
mongoose.disconnect();
comme indiqué dans cette réponse .la source
Vous pouvez définir la connexion sur une variable puis la déconnecter lorsque vous avez terminé:
la source
J'utilise la version 4.4.2 et aucune des autres réponses n'a fonctionné pour moi. Mais ajouter
useMongoClient
des options et les mettre dans une variable que vous appelezclose
semblait fonctionner.la source
Vous obtiendrez une erreur si vous essayez de fermer / déconnecter en dehors de la méthode. La meilleure solution consiste à fermer la connexion dans les deux rappels de la méthode. Le code factice est ici.
la source
Tout comme Jake Wilson l'a dit: vous pouvez définir la connexion sur une variable puis la déconnecter lorsque vous avez terminé:
ou si dans la fonction Async:
sinon, lorsque je le vérifiais dans mon environnement, il y avait une erreur.
la source
Vous avez probablement ceci:
mais vous pouvez aussi avoir quelque chose comme ça:
vous ne pouvez pas appeler
db.disconnect()
mais vous pouvez fermer la connexion après l'avoir utilisée.la source