Si ejecuto un servidor con el puerto 80 e intento usar xmlHTTPrequest, aparece este error:Error: listen EADDRINUSE
¿Por qué es un problema para nodejs, si quiero hacer una solicitud, mientras ejecuto un servidor en el puerto 80? Para los navegadores web no es un problema: puedo navegar en Internet mientras el servidor se está ejecutando.
El servidor es:
net.createServer(function (socket) {
socket.name = socket.remoteAddress + ":" + socket.remotePort;
console.log('connection request from: ' + socket.remoteAddress);
socket.destroy();
}).listen(options.port);
Y la solicitud:
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
sys.puts("State: " + this.readyState);
if (this.readyState == 4) {
sys.puts("Complete.\nBody length: " + this.responseText.length);
sys.puts("Body:\n" + this.responseText);
}
};
xhr.open("GET", "http://mywebsite.com");
xhr.send();
javascript
node.js
Danny Fox
fuente
fuente
Respuestas:
EADDRINUSE
significa que el número de puerto quelisten()
intenta vincular el servidor ya está en uso.Entonces, en su caso, ya debe estar ejecutando 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 utilizarlo como proxy.
Debe verificar el
listening
evento como este, para ver si el servidor realmente está escuchando:fuente
Lo que realmente me ayudó fue:
Pero esto matará un proceso del sistema.
Con
Puedes comprobar si funcionó.
fuente
ps aux | grep node
demostraría eso. En lugar de matar a la aplicación con CTRL + Z , salir de la aplicación con CTRL + C . Esto sale de la aplicación con gracia y se elimina el enlace del puerto.Lo anterior
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 solo proceso en lugar de matar ciegamente todos los procesos activos.
En ese caso, primero obtenga el ID de proceso (PID) del proceso que se ejecuta en ese puerto (digamos 8888):
lsof -i tcp:8888
Esto devolverá algo como:
Entonces solo haz (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 interesante hilo sobre por qué no debería
kill -9
un proceso .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 una consecuencia de no salir de un proceso con gracia. Eso significa que, a mucha gente salir de un comando de nodo (o cualquier otro) usando CTRL + Z . La forma correcta de detener un proceso en ejecución es emitiendo el comando CTRL + C 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 matarlo usted mismo antes de poder volver a ejecutarlo.
fuente
pgrep node
muestra si algún proceso de nodo se te ha escapado.pkill node
los mataráSolo un aviso, Skype a veces escuchará en el puerto 80 y, por lo tanto, causará este error si intenta escuchar en el puerto 80 desde Node.js o cualquier otra aplicación.
Puede desactivar ese comportamiento en Skype accediendo a las opciones y haciendo clic en Avanzado -> Conexión -> Usar puerto 80 (Desmarque esto)
fuente
Deberías intentar eliminar el proceso que está escuchando en el puerto 80.
Killall eliminará todas las aplicaciones de nodo que se estén ejecutando. Es posible que no quieras hacer eso. Con este comando puede matar solo la aplicación que está escuchando en un puerto conocido.
Si usa Unix intente este comando:
fuente
Dos posibles soluciones para Windows / Mac
1. Número de puerto libre
Ventanas
Mac
Puedes probar netstat
Para OSX El Capitan y más reciente (o si su netstat no admite -p), use lsof
Si esto no resuelve su problema, los
Mac
usuarios pueden consultar la discusión completa sobre este tema Buscar (y matar) el proceso de bloqueo del puerto 3000 en Mac2. ¿Cambiar el número de puerto?
Ventanas
Mac
fuente
netstat -ona | findstr ".0:PORT +0.0.0.0:0 +LISTENING" | for /f "tokens=5" %t in ('more') do taskkill /PID:%t /f
En un entorno de controlador, puede usar:
pkill node
antes de ejecutar su script debe hacer el trabajo.Tenga en cuenta que este comando matará todos los
node
procesos, lo que podría ser correcto si tiene, por ejemplo, un contenedor que ejecuta solo una instancia, nuestro tiene tal envio donde puede garantizarlo.En cualquier otro escenario, recomiendo usar un comando para eliminar un determinado identificador de proceso o nombre que encontraste buscándolo mediante programación. como si se llama su proceso, nodo-servidor-1 que podría hacer
pkill node-server-1
.Este recurso puede ser útil para comprender: https://www.thegeekstuff.com/2009/12/4-ways-to-kill-a-process-kill-killall-pkill-xkill/
fuente
pgrep node
denode
Su aplicación ya se está ejecutando en ese puerto 8080. Use este código para eliminar el puerto y vuelva a ejecutar su código
fuente
kill -9
es casi seguro excesivo y, en mi opinión, un horrible consejo para dar sin advertencias específicas sobre eso. Simplementekill
, probablemente el truco, y realmente, el problema fundamental en esta cuestión es, creo, que están tratando de volver a ejecutar un servidor de una y otra vez, así que esto es sólo un truco, no una solución. Necesitan tener una mejor comprensión de lo que está sucediendo, lo que esta respuesta realmente no proporciona.Otra cosa que puede dar este error, son dos servidores HTTP en el mismo código de nodo. Estaba actualizando algunos códigos Express 2 a Express 3, y tuve esto ...
Y, provocó este error.
fuente
Esto funciona para mí (estoy usando mac). Ejecute este comando
lsof -PiTCP -sTCP:LISTEN
Esto mostrará una lista de puertos que está utilizando su sistema. Encuentra el
PID
que tu nodo se está ejecutandoy correr
kill -9 [YOUR_PID]
fuente
EADDRINUSE
significa que el puerto (que intentamos escuchar en la aplicación de nodo) ya se está utilizando. Para superar, necesitamos identificar qué proceso se está ejecutando con ese puerto.Por ejemplo, si estamos tratando de escuchar nuestra aplicación de nodo en el puerto 3000. Necesitamos verificar si ese puerto ya está siendo utilizado por algún otro proceso.
paso 1:
Que el comando anterior da el resultado a continuación.
paso 2:
Ahora tienes el ID de proceso (25315), Mata ese proceso.
paso 3:
Nota: Esta solución para usuarios de Linux.
fuente
fuente
para matar a la fuerza
use el cmd anterior para eliminar un puerto en particular y luego ejecute su servidor
fuente
Pruebe ambos comandos y detendrá todo el proceso de nodo.
fuente
Este error se produce cuando tiene algún proceso ejecutándose en un puerto en el que desea ejecutar su aplicación.
cómo obtener qué proceso se ejecuta en ese puerto => comando: sudo netstat -ap | grep: 3000
salida: obtendrá la información del proceso que está utilizando ese puerto
tcp 0 0 Dirección IP: 3000 : ESCUCHE 26869 / nodo
Ahora puedes matar ese proceso sudo kill -9 26869
fuente
En el siguiente comando, reemplace su número de puerto
fuente
EADDRINUSE significa que el puerto de su aplicación nodejs ya está en uso.
fuente
Hay una manera de terminar el proceso usando el Administrador de tareas:
Vaya al Administrador de tareas (o use el acceso directo Ctrl+ Shift+ Esc)
En "Procesos en segundo plano", busque los procesos "Node.js" y finalícelos (haga clic con el botón derecho en ellos y elija "Finalizar tarea")
fuente
He visto este error antes (en el nodo) con http.client y, según recuerdo, el problema tenía que ver con no inicializar httpClient o establecer opciones incorrectas en la creación de httpClient y / o en la solicitud de URL.
fuente
También tengo el mismo problema, y simplemente cierro la terminal y abro una nueva terminal y ejecuto
de nuevo. eso funciona para mí, en algún momento solo tengo que esperar unos segundos hasta que vuelva a funcionar.
Pero esto solo funciona en una máquina de desarrollador en lugar de una consola de servidor.
fuente
Error: escuchar EADDRINUSE significa que el puerto que desea asignar / vincular a su servidor de aplicaciones ya está en uso. Puede asignar otro puerto a su aplicación.
O si desea asignar el mismo puerto a la aplicación. Luego, elimine la aplicación que se ejecuta en el puerto deseado.
Para una aplicación de nodo, lo que puede probar es encontrar la identificación del proceso para la aplicación de nodo:
Después de obtener la identificación del proceso, haz
fuente
En Debian descubrí que se ejecuta en el puerto 80, debe emitir el comando como root, es decir
Espero que ayude
fuente
En mi caso, Apache HTTP Server se ejecutó en el puerto 80. Lo resolví emitiendo el comando como root
sudo killall httpd
Actualizar
Si Jenkin está instalado y ejecutándose en su Mac;
sudo lsof -i tcp:8080
sudo launchctl unload /Library/LaunchDaemons/org.jenkins-ci.plist
fuente
Parece que se está ejecutando otro proceso de publicación de nodos. Verifíquelo escribiendo esto en su consola (Linux / Mac):
y salga con:
O uso alternativo
para servir su proyecto en un puerto libre de su elección.
fuente
Mientras elimina el NODE_PORT, puede matar su proceso de Chrome o cualquier cosa que esté escuchando en el mismo puerto, y eso es molesto.
Este script de shell puede ser útil; en mi caso, el puerto es 1337, pero puede cambiarlo en cualquier momento
fuente
En mi caso utilizo un alojamiento web pero es lo mismo en el host local, utilicé:
para ver el proceso del nodo entonces, la consola muestra el proceso con PID. para matar el proceso tienes que usar este comando:
donde PID es la identificación del proceso del comando anterior.
fuente
Dos servidores no pueden escuchar en el mismo puerto, así que verifique si otro servidor escucha en el mismo puerto, también verifique la sincronización del navegador si se está ejecutando en el mismo puerto
fuente
Para otras personas en Windows 10 con nodo como
localhost
y ejecutándose en un puerto como 3500, no 80 ...Qué no funciona:
Lo que muestra información pero aún no funciona:
¿Qué funciona?
Git Bash o Powershell en Windows
Observe el PID (extremo derecho)
No pude llegar
killall
al trabajo ... así queAhora, después de ese ejercicio no tan divertido en Windows, me di cuenta de que puedo usar el administrador de tareas y encontrar el motor Node y simplemente finalizarlo.
FYI, estaba usando Visual Studio Code para ejecutar Node en el puerto 3500, y uso el shell Git Bash dentro del código VS. Había salido con gracia con Ctrl + C, pero a veces esto no lo mata. No quiero cambiar mi puerto o reiniciar, así que funcionó. Ojalá ayude a los demás. De lo contrario, es documentación para mí.
fuente
Para los usuarios de Windows, ejecute el siguiente comando en la ventana de PowerShell para eliminar todos los procesos de nodo.
fuente
La opción que me funciona:
Correr:
Obtendrás algo como:
fuente