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 node
sugerido 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.