Używam mangusty w skrypcie, który nie powinien działać w sposób ciągły, i mam do czynienia z bardzo prostym problemem, ale nie mogę znaleźć odpowiedzi; po prostu mówiąc, kiedy wykonuję wywołanie dowolnej funkcji mongoose, która wysyła żądania do mongodb, moja instancja nodejs nigdy się nie zatrzymuje i muszę ją ręcznie zabić za pomocą, powiedzmy, Ctrl + c lub Program.exit ().
Kod wygląda mniej więcej tak:
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);
Próbowałem dodać wywołania do mongoose.disconnect (), ale nie otrzymałem wyniku. Poza tym wszystko działa dobrze (znajdowanie, zapisywanie, ...).
To jest dokładnie ten sam problem, co ta osoba, niestety nie otrzymał żadnej odpowiedzi: https://groups.google.com/group/mongoose-orm/browse_thread/thread/c72cc1c51c76e661
Dzięki
EDYCJA: zaakceptował poniższą odpowiedź, ponieważ jest technicznie poprawna, ale jeśli ktoś kiedykolwiek napotka ten problem ponownie, wydaje się, że mongoose i / lub sterownik mongodb w rzeczywistości nie zamykają połączenia, gdy pytasz, czy nadal są uruchomione zapytania.
W ogóle nie pamięta nawet połączenia rozłączającego, nie robi tego po zakończeniu wykonywania zapytań; po prostu odrzuca twoje wywołanie bez wyrzuconego wyjątku lub czegokolwiek w tym rodzaju i nigdy tak naprawdę nie zamyka połączenia.
Więc masz to: upewnij się, że każde zapytanie zostało przetworzone przed wywołaniem odłączenia (), jeśli chcesz, aby faktycznie działało.
Odpowiedzi:
Możesz zamknąć połączenie za pomocą
źródło
Connection.close()
Druga odpowiedź mi nie pomogła. Musiałem użyć,
mongoose.disconnect();
jak podano w tej odpowiedzi .źródło
Możesz ustawić połączenie na zmienną, a następnie rozłączyć je, gdy skończysz:
źródło
Używam wersji 4.4.2 i żadna z pozostałych odpowiedzi nie zadziałała. Ale dodanie
useMongoClient
do opcji i umieszczenie jej w zmiennej, do której się odwołujesz,close
wydawało się działać.źródło
Jeśli spróbujesz zamknąć / rozłączyć się poza tą metodą, pojawi się błąd. Najlepszym rozwiązaniem jest zamknięcie połączenia w obu callbackach w metodzie. Fikcyjny kod jest tutaj.
źródło
Tak jak powiedział Jake Wilson: Możesz ustawić połączenie na zmienną, a następnie rozłączyć je, gdy skończysz:
lub jeśli w funkcji Async:
w przeciwnym razie, gdy sprawdzałem go w swoim środowisku, wystąpił błąd.
źródło
Prawdopodobnie masz to:
ale możesz też mieć coś takiego:
nie możesz zadzwonić,
db.disconnect()
ale po użyciu możesz zamknąć połączenie.źródło