Mongoose Model.find () hängt, wenn nicht mit der Datenbank verbunden ist

8

Ich gehe ein paar Fehlerszenarien durch und versuche zu verstehen, wie ich mit diesen umgehen soll.

Wenn keine Datenbankverbindung besteht, scheint ein Mongoose Model.find(...) -Aufruf zu hängen. Unterhalb des Beispielcodes. Ich hätte angenommen, dass der Callback mit einem err -Objekt aufgerufen wird, aber es ist nicht.

Wie kann ich verhindern, dass der Modellanruf hängen bleibt? Muss ich das readyState bei jedem Zugriff auf ein Modell manuell überprüfen?

%Vor%     
Mark 23.07.2012, 07:52
quelle

3 Antworten

7

Es ist keine Antwort, aber ich hoffe, es wird Ihnen helfen, eine Lösung zu finden. Hatte sehr ähnliches Problem mit mongoose.createConnection während der Verwendung von Pass-Modul, fand heraus, dass es gut mit mongoose.connect

    
bFunc 12.12.2012 23:47
quelle
4

Da Sie bereits einen Fehlerhandler im Verbindungsaufruf verwenden, wäre es sinnvoll, Ihre App zu beenden, wenn die Datenbank nicht verfügbar ist, oder eine Middleware zu aktivieren, die mit einem hübschen 500 Internal Server Error antwortet.

Mongoose verwendet node-mongodb-native unter der Haube für Verbindungen zu mongodb, möglicherweise finden Sie dort andere nützliche Verbindungsoptionen. :)

EDIT: Versuchen Sie socketOptions.socketTimeoutMS einzustellen. Anscheinend gibt es kein festgelegtes Zeitlimit. Siehe Ссылка .

Ich habe keinen Knoten auf meiner Arbeitsmaschine, um die exakte Syntax für Sie auszuprobieren, aber Sie werden wahrscheinlich mongoose.Connection verwenden müssen, die eine open() -Methode hat, die Optionen akzeptiert, um zu node-mongodb-native zu gelangen . Ich glaube nicht, dass mongoose.connect() diese Optionen akzeptiert, aber ich könnte falsch liegen.

    
rdrey 23.07.2012 12:42
quelle
0

Um dieses Problem zu lösen, müssen Sie 3 Aufgaben ausführen:

  1. Konfigurieren Sie die bufferMaxEntries: 0 im Abschnitt options.db (weitere Einzelheiten finden Sie unter hier ) Bei der Deaktivierung von bufferMaxEntries bewirkt dies, dass mongoose die Pufferbefehle stoppt und erneut versucht, sie zu senden, wenn der Server heruntergefahren ist.

  2. Konfigurieren Sie autoReconnect: false im Abschnitt options.db Deaktivieren Sie autoReconnet in der db-Ebene. (Weitere Informationen finden Sie hier )

  3. Wenn Sie mit dem mongodb-Replicaset arbeiten, müssen Sie bufferCommands in der Schema-Ebene (für jedes von Ihnen erstellte Schema) deaktivieren

    var schema = neues Schema ({..}, {bufferCommands: false});

Tal Avissar 12.12.2016 17:19
quelle

Tags und Links