Zufälliger "ECONNABORTED" -Fehler bei Verwendung von sendFile in Express / Node

9

Ich habe einen Knotenserver mit Express-Middleware eingerichtet. Ich bekomme den ECONNABORTED-Fehler nach dem Zufallsprinzip bei einigen Dateien, wenn ich eine HTML-Datei lade, die ungefähr 10 andere Ladevorgänge auslöst (js, css, etc.). Der genaue Fehler ist:

%Vor%

Erzeugt durch diesen vereinfachten Code (nachdem ich versucht habe, das Problem zu debuggen):

%Vor%

In vielen Posts wird über diesen Fehler gesprochen, der sich daraus ergibt, dass der vollständige Pfadname nicht angegeben wird. Das ist nicht die Situation hier. Ich gebe den vollständigen Pfad an und tatsächlich wird der Fehler zufällig erzeugt. Es gibt Zeiten, in denen die Seite und alle nachfolgenden Links perfekt geladen sind, und manchmal nicht. Ich habe versucht, den Cache zu leeren und fand kein Muster, um es mit diesem zu verbinden.

Dieser spezifische Fehler scheint ein allgemeiner Begriff für eine abgebrochene Socket-Verbindung zu sein und wird im Zusammenhang mit anderen Anwendungen wie FTP diskutiert.

Nachdem festgestellt wurde, dass die Knoten-Worker-Threads erhöht werden können, habe ich Folgendes versucht:

%Vor%

Ich bin jedoch der Meinung, dass selbst wenn dies nicht der Fall ist, die Dateiübertragung höchstens darauf warten muss, dass ein Worker-Thread frei ist und nicht abgebrochen wird. Ich rede hier nicht von großen Dateien, alle Dateien sind kleiner als 1 MB.

Ich habe das Gefühl, dass das mit Knoten direkt nichts zu tun hat.

Bitte zeigen Sie auf andere Möglichkeiten (Knoten oder anders), um diesen Fehler zu behandeln. Auch andere indirekte Lösungen? Sich ein paar Mal zu wiederholen könnte eins sein, aber das wäre ungeschickt. EDIT: Nein, ich kann es nicht wiederholen. Header werden bereits mit dem Fehler gesendet!

EIN SEITENHINWEIS: Viele Beispiele zur Verwendung von sendFile überspringen die Verwendung des Rückrufs, wodurch der Eindruck entsteht, dass es sich um einen synchronen Anruf handelt. Es ist nicht. Verwenden Sie den Callback zu jeder Zeit, überprüfen Sie den Erfolg und gehen Sie erst dann zur "nächsten" Middleware oder führen Sie die entsprechenden Schritte durch, wenn der Versand aus irgendeinem Grund fehlschlägt. Andernfalls kann es schwierig sein, die Auswirkungen in einer asynchronen Umgebung zu debuggen.

    
Sam 16.11.2015, 02:34
quelle

2 Antworten

2

Siehe Ссылка Ist es möglich, dass Sie in einigen Fällen die Verbindung beenden, indem Sie res.end aufrufen, bevor der asynchrone Aufruf von res.sendFile endet?

Wenn das nicht der Fall ist - können Sie mehr von Ihrem Anwendungscode einfügen?

    
Gabi Lee 05.11.2016 19:44
quelle
0

Die Deinstallation und Neuinstallation von MongoDB hat das für mich gelöst.

Ich hatte das gleiche Problem. Es begann, als ich meinen Laptop neu starten musste, weil er nicht mehr reagierte. Beim Versuch, eine Verbindung zum mongo-Server mit nodejs herzustellen, wurde immer der Fehler ECONNABORTED

ausgegeben     
Rahul Singh 26.02.2018 19:37
quelle

Tags und Links