Ich verwende Mungo in einem Skript, das nicht kontinuierlich ausgeführt werden soll, und stehe vor einem scheinbar sehr einfachen Problem, kann jedoch keine Antwort finden. Einfach ausgedrückt, sobald ich eine Mungofunktion aufrufe, die Anforderungen an mongodb sendet, stoppt meine nodejs-Instanz nie und ich muss sie manuell beenden, z. B. mit Strg + c oder Program.exit ().
Der Code sieht ungefähr so aus:
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);
Ich habe versucht, Aufrufe zu mongoose.disconnect () hinzuzufügen, aber kein Ergebnis. Abgesehen davon funktioniert alles gut (finden, speichern, ...).
Dies ist genau das gleiche Problem wie bei dieser Person. Leider hat sie keine Antwort erhalten: https://groups.google.com/group/mongoose-orm/browse_thread/thread/c72cc1c51c76e661
Vielen Dank
BEARBEITEN: Akzeptierte die unten stehende Antwort, da sie technisch korrekt ist. Wenn jedoch jemand dieses Problem erneut auftritt, scheint es, dass Mungo und / oder der Mongodb-Treiber die Verbindung nicht tatsächlich schließen, wenn Sie danach fragen, ob noch Abfragen ausgeführt werden.
Es erinnert sich überhaupt nicht an den Verbindungsabbruch, es tut es nicht, sobald die Abfragen beendet sind. Es verwirft einfach Ihren Anruf ohne Ausnahme oder ähnliches und schließt die Verbindung nie wirklich.
Da haben Sie es also: Stellen Sie sicher, dass jede Abfrage verarbeitet wurde, bevor Sie separect () aufrufen, wenn Sie möchten, dass sie tatsächlich funktioniert.
Antworten:
Sie können die Verbindung mit schließen
quelle
Connection.close()
Methode nur exportiert und ist nur verfügbar. Verwenden Sie sie daher.Die andere Antwort hat bei mir nicht funktioniert. Ich musste
mongoose.disconnect();
wie in dieser Antwort angegeben verwenden .quelle
Sie können die Verbindung zu einer Variablen festlegen und diese dann trennen, wenn Sie fertig sind:
quelle
Ich verwende Version 4.4.2 und keine der anderen Antworten hat für mich funktioniert. Aber das Hinzufügen
useMongoClient
zu den Optionen und das Einfügen in eine Variable, die Sie aufrufen,close
schien zu funktionieren.quelle
Sie erhalten eine Fehlermeldung, wenn Sie versuchen, außerhalb der Methode zu schließen / zu trennen. Die beste Lösung besteht darin, die Verbindung in beiden Rückrufen in der Methode zu schließen. Der Dummy-Code ist hier.
quelle
Genau wie Jake Wilson sagte: Sie können die Verbindung zu einer Variablen einstellen und sie dann trennen, wenn Sie fertig sind:
oder wenn innerhalb der Async-Funktion:
Andernfalls ist beim Überprüfen in meiner Umgebung ein Fehler aufgetreten.
quelle
Wahrscheinlich haben Sie Folgendes:
Sie können aber auch so etwas haben:
Sie können nicht anrufen,
db.disconnect()
aber Sie können die Verbindung schließen, nachdem Sie sie verwendet haben.quelle