Saltar al contenido

¿Cómo corregir el error: escucha EADDRINUSE mientras usas nodejs?

Luego de de esta larga recopilación de información pudimos resolver este conflicto que suelen tener algunos de nuestros lectores. Te ofrecemos la respuesta y deseamos que sea de mucha apoyo.

Solución:

Lo que realmente me ayudó fue:

killall -9 node

Pero esto matará un proceso del sistema.

Con

ps ax

Puedes comprobar si funcionó.

EADDRINUSE significa que el número de puerto que listen() intenta vincular el servidor a que ya está en uso.

Entonces, en su caso, ya debe estar ejecutándose un servidor en el puerto 80.

Si tiene otro servidor web ejecutándose en este puerto, debe colocar node.js detrás de ese servidor y transmitirlo a través de él.

Deberías comprobar el listening evento como este, para ver si el servidor realmente está escuchando:

var http=require('http');

var server=http.createServer(function(req,res)
    res.end('test');
);

server.on('listening',function()
    console.log('ok, server is running');
);

server.listen(80);

Lo antes mencionado killall -9 nodesugerido por Patrick, funciona como se esperaba y resuelve el problema, pero es posible que desee leer la parte de edición de esta misma respuesta sobre por qué kill -9 puede no ser la mejor manera de hacerlo.

Además de eso, es posible que desee apuntar a un único proceso en lugar de matar ciegamente todos procesos activos.

En ese caso, primero obtenga el ID de proceso (PID) del proceso que se ejecuta en ese puerto (por ejemplo, 8888):

lsof -i tcp:8888

Esto devolverá algo como:

COMMAND   PID    USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
node     57385   You   11u  IPv6 0xac745b2749fd2be3      0t0  TCP *:ddi-tcp-1 (LISTEN)

Entonces solo hazlo (ps – en realidad no. Por favor, sigue leyendo a continuación):

kill -9 57385

Puedes leer un poco más sobre esto aquí.

EDITAR: Estaba leyendo sobre un tema bastante relacionado hoy y me topé con este hilo interesante sobre por qué no debería kill -9 un proceso.

En general, debe usar matar -15 antes de matar -9 para darle al proceso de destino la oportunidad de limpiar después de sí mismo. (Los procesos no pueden capturar o ignorar SIGKILL, pero pueden capturar SIGTERM y, a menudo, lo hacen). Si no le da al proceso la oportunidad de terminar lo que está haciendo y limpiar, puede dejar archivos dañados (u otro estado) alrededor que no podrá entender una vez reiniciado.

Entonces, como se indicó, es mejor que elimine el proceso anterior con:

kill -15 57385

EDITAR 2: Como se señaló en un comentario por aquí muchas veces, este error es consecuencia de no salir de un proceso correctamente. Eso significa que mucha gente sale de un comando de nodo (o cualquier otro) usando CTRL+Z. La forma correcta de detener un proceso en ejecución es emitiendo el CTRL+C comando que realiza una salida limpia.

Salir de un proceso de la manera correcta liberará ese puerto mientras se apaga. Esto le permitirá reiniciar el proceso sin pasar por la molestia de eliminarlo usted mismo antes de poder volver a ejecutarlo.

Te mostramos reseñas y calificaciones

Si estás de acuerdo, eres capaz de dejar un post acerca de qué te ha impresionado de este escrito.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *