Ich erhalte folgende Fehlermeldung:
events.js:48
throw arguments[1]; // Unhandled 'error' event
^
Error: socket hang up
at createHangUpError (http.js:1091:15)
at Socket.onend (http.js:1154:27)
at TCP.onread (net.js:363:26)
In Knoten v0.6.6 enthält mein Code mehrere http.request- und .get-Aufrufe Bitte schlagen Sie Wege vor, um zu ermitteln, warum der Socket aufhängt und auf welcher Anforderung/welchem Aufruf er sich befindet . Vielen Dank
Schnelle und schmutzige Lösung für die Entwicklung:
Verwenden Sie longjohn , um lange Stapelspuren zu erhalten, die die asynchronen Operationen enthalten.
Saubere und korrekte Lösung: Technisch gesehen, in Knoten, wenn Sie ein 'error'
-Ereignis ausgeben und niemand darauf hört, wird ausgegeben. Damit es nicht geworfen wird, legen Sie einen Hörer darauf und handhaben Sie es selbst. Auf diese Weise können Sie den Fehler mit weiteren Informationen protokollieren.
Um einen Listener für eine Anrufgruppe zu haben, können Sie domains verwenden und andere Fehler während der Laufzeit abfangen. Stellen Sie sicher, dass sich jeder async-Vorgang, der sich auf http (Server/Client) bezieht, im Vergleich zu den anderen Teilen des Codes in einem anderen domain - Kontext befindet. Die Domäne überwacht automatisch die (Domains sind veraltet). error
-Ereignisse und übermittelt sie an ihren eigenen Handler. Sie hören also nur diesen Handler und erhalten die Fehlerdaten. Sie erhalten auch kostenlos weitere Informationen.
Als Mike
können Sie auch NODE_DEBUG=net
einstellen oder strace verwenden. Beide bieten Ihnen an, was der Knoten intern tut.
Außerdem können Sie die Umgebungsvariable NODE_DEBUG
auf net
setzen, um Informationen über die Aktivitäten aller Sockets zu erhalten. Auf diese Weise können Sie isolieren, welche Remote-Ressource die Verbindung zurücksetzt.
Neben der Antwort von ftft1885
http.get(url, function(res)
{
var bodyChunks = [];
res.on('data', function(chunk)
{
// Store data chunks in an array
bodyChunks.Push(chunk);
}).on('error', function(e)
{
// Call callback function with the error object which comes from the response
callback(e, null);
}).on('end', function()
{
// Call callback function with the concatenated chunks parsed as a JSON object (for example)
callback(null, JSON.parse(Buffer.concat(bodyChunks)));
});
}).on('error', function(e) {
// Call callback function with the error object which comes from the request
callback(e, null);
});
Als ich diesen "Socket auflegen" -Fehler hatte, lag dies daran, dass ich die Anforderungsfehler nicht abfing.
benutzen
req.on('error',function(err){})
Wahrscheinlich wurde Ihre Server-Socket-Verbindung irgendwie geschlossen, bevor alle http.ServerResponse-Objekte beendet wurden. Stellen Sie sicher, dass Sie alle eingehenden Anforderungen gestoppt haben, bevor Sie mit eingehenden Verbindungen etwas tun (eingehende Verbindungen unterscheiden sich etwas von eingehenden HTTP-Anforderungen).