node.js - studio - Cómo depurar un socket colgar el error en NodeJS?
nodejs inspect port (5)
Además de la respuesta de 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);
});
Cuando tuve este error de "socket colgar", fue porque no captaba los errores de las solicitudes.
Estoy teniendo el siguiente error:
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)
En el nodo v0.6.6, mi código tiene múltiples llamadas http.request y .get. Sugiera formas de rastrear qué hace que cuelgue el socket y en qué solicitud / llamada se encuentra. Gracias
Además, puede establecer la variable de entorno NODE_DEBUG
en net
para obtener información sobre lo que están haciendo todos los sockets. De esta forma puede aislar qué recurso remoto está restableciendo la conexión.
Lo más probable es que la conexión del socket del servidor haya sido cerrada de alguna manera antes de que todos los objetos http.ServerResponse hayan finalizado. Asegúrese de haber detenido todas las solicitudes entrantes antes de hacer algo con las conexiones entrantes (la conexión entrante es diferente de la solicitud HTTP entrante).
utilizar
req.on(''error'',function(err){})
Solución rápida y sucia para el desarrollo :
Usa longjohn , obtienes largas trazas de pila que contendrán las operaciones asincrónicas.
Solución limpia y correcta : Técnicamente, en el nodo, cada vez que se emite un evento de ''error''
y nadie lo escucha, se lanzará . Para que no se arroje, coloque un oyente y hágalo usted mismo. De esta forma puede registrar el error con más información.
Para tener un oyente para un grupo de llamadas, puede usar domains y también detectar otros errores en el tiempo de ejecución. Asegúrese de que cada operación asíncrona relacionada con http (Servidor / Cliente) se encuentre en un contexto de domains diferente en comparación con las otras partes del código, el dominio escuchará automáticamente los eventos de error
y lo propagará a su propio controlador.Entonces solo escuchas a ese controlador y obtienes los datos de error. También obtienes más información gratis. (Los dominios están depreceated).
Como sugirió Mike
, también puedes establecer NODE_DEBUG=net
o usar strace . Ambos te proporcionan lo que hace el nodo internamente.