ExpressJS - evento de error no controlado de lanzamiento er


180

Creé la aplicación expressjs usando los siguientes comandos:

express -e folderName
npm install ejs --save
npm install

Cuando ejecuto la aplicación con:, node app.jstengo los siguientes errores:

events.js:72
    throw er; // Unhandled 'error' event
          ^
Error: listen EADDRINUSE
    at errnoException (net.js:884:11)
    at Server._listen2 (net.js:1022:14)
    at listen (net.js:1044:10)
    at Server.listen (net.js:1110:5)
    at Object.<anonymous> (folderName/app.js:33:24)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)

¿Como arreglarlo?


30
EADDRINUSE significa que el puerto ya está en uso. intente cambiar en qué puerto escucha el servidor web en app.js o elimine lo que esté usando ese puerto si no lo necesita.
go-oleg

Si el puerto de cierre no se está arreglando, intente esto> stackoverflow.com/a/52441297/6665568
Natesh bhat el

Respuestas:


400

Había ejecutado otro servidor usando el mismo puerto como 8080.

Tal vez habías corrido node app en otro shell. Ciérrelo y vuelva a correr.

Puede consultar el PUERTO no. está disponible o no está usando

netstat -tulnp | grep <port no>

Alternativamente, puede usar lsof :

lsof -i :<port no>

44
Me encontré con esto usando WebStorm. Tenía dos sesiones de depuración abiertas en el mismo espacio de trabajo. Doh!
Nick Curran

53
Un error tan común realmente merece un mejor mensaje de error.
Tamlyn

Esto me sucedió cuando uso node-activedirectory. A mi baseDN le faltaba el subdominio. baseDN: 'ldap: // dc = subdominio, dc = dominio, dc = com'
Marque el

Estaba ejecutando una instancia de rails server...: |
Sheharyar

1
en mac high sierra: lsof -nP -i4TCP: $ PORT | grep ESCUCHE
Roee

61

Obtenemos un error similar cuando a veces ejecutamos nuestra aplicación express. Tenemos que seguir lo mismo en ese caso. Necesitamos verificar si se está ejecutando en cualquier terminal. Si desea encontrar y eliminar el proceso, siga estos pasos:

  • ps aux | nodo grep
  • Encuentre la ID del proceso (segundo desde la izquierda):
  • kill -9 PRCOCESS_ID

O

Use un solo comando para cerrar todos los procesos de nodo en ejecución.

ps aux | awk '/node/{print $2}' | xargs kill -9

55
ps aux | grep node | awk '{print $2}' | xargs kill -9
Daniel

killall -r node(en Linux)
jt3k

25

Probablemente todavía se esté ejecutando una instancia. Esto lo arreglará.

killall node

Actualización: este comando solo funcionará en Linux / Ubuntu y Mac.


1
killall -9 node
Pankaj Shinde

16

Si está en Linux, este problema también puede ocurrir si Nodejs no se está ejecutando como root.

Cambiar de esto:

nodejs /path/to/script.js

A esto:

sudo nodejs /path/to/script.js

Simplemente me sucedió y ninguna de las otras sugerencias aquí lo arregló. Afortunadamente, recordé que el script funcionaba el otro día cuando se ejecutaba como root. ¡Espero que esto ayude a alguien!

Descargo de responsabilidad: esta probablemente no sea la mejor solución para un entorno de producción. Iniciar su servicio como root puede introducir algunos agujeros de seguridad en su servidor / aplicación. En mi caso, esta fue una solución para un servicio local, pero alentaría a otros a pasar más tiempo tratando de aislar la causa.


1
Suena realmente peligroso simplemente ejecutar el script como root para resolver este problema. A menos que esté intentando enlazar a un puerto por debajo de 1024, nunca debería necesitar ejecutar el nodo como root. Sospecho que en su caso, está intentando vincularse al puerto 80 o 443. Sugeriría usar Nginx para dirigir el tráfico desde esos puertos a nodejs en un puerto superior, como 8000 o algo así.
varikin

1
Gracias por señalar eso. No creo que el script en particular que estaba usando requiriera ninguno de esos puertos, ciertamente no estoy usando Node como un servidor http. ¿Quizás fue uno de los módulos que utilicé que requería permisos adicionales? Pido disculpas, ha pasado un tiempo, así que ni siquiera estoy seguro de qué script solicitó esta solución. Agregaré un descargo de responsabilidad sobre intentar esto en un entorno de producción.
CauselessEffect

12

Esto se debe a que el puerto que está utilizando para ejecutar el script ya está en uso. Tienes que detener todos los demás nodos que están usando esa publicación. para eso, puede verificar todos los nodos por

ps -e

O para el uso del proceso de nodo solo ps -ef | grep node Esto le dará la lista de todos los procesos de nodo con ID

matar todo el proceso de nodo

sudo killall -9 node

O para la identificación específica sudo kill -9 id


me salvaste la noche!
Mujtaba Mahmood

8

Arreglé el error cambiando el puerto que era

app.set('port', process.env.PORT || 3000);<br>

y cambiado a:

app.set('port', process.env.PORT || 8080);<br>

1
¿Cómo difiere esto de aplicar lo que dice la respuesta aceptada a la respuesta dada por Mark?
EWit

3

El puerto que Node está intentando usar ya puede ser usado por otro programa. En mi caso fue ntop , que había instalado recientemente. Tuve que abrir http: // localhost: 3000 / en un navegador para darme cuenta. Aquí se proporciona otra forma de encontrar el proceso .


2

Si desea utilizar el mismo número de puerto, escriba kill %el terminal, que mata el proceso en segundo plano actual y libera el puerto para su uso posterior.


2

Esto significa que su archivo se está ejecutando ahora. solo ingrese el siguiente código e intente nuevamente:

sudo pkill node

1

Cierre cualquier otro servidor de nodo que se esté ejecutando, incluso si están en otras ventanas de terminal o en puertos diferentes. Eso debería arreglar el problema.


1

Si ha intentado eliminar todas las instancias de nodo y otros servicios que escuchan en 3000 (el valor predeterminado utilizado por la configuración de esqueleto rápido) en vano, debe verificar para asegurarse de que su entorno no esté definiendo 'puerto' como algo inesperado. De lo contrario, es probable que obtenga el mismo error. En el archivo app.js de express skeleton, verás la línea 15:

app.set('port', process.env.PORT || 3000);

1

Para solucionar esto, finalice o cierre el servidor que está ejecutando. Si está utilizando Eclipse IDE, siga esto,

Ejecutar> Depurar

ingrese la descripción de la imagen aquí

Haga clic derecho en el proceso en ejecución y haga clic en Terminar .


1

events.js: 183 tiros er; // Evento de 'error' no controlado

También tuve el mismo tipo de problema e intenté de muchas maneras, pero finalmente obtuve esto, esto funciona bien:

npm install ws@3.3.2 --save-dev --save-exact

Consulte este enlace para obtener más aclaraciones https://github.com/ionic-team/ionic-cli/issues/2922


1

En realidad, las teclas Ctrl + C no liberan el puerto utilizado por el proceso de nodo. Entonces hay este error. La resolución del problema fue usar el siguiente fragmento de código en server.js:

process.on('SIGINT', function() {
  console.log( "\nGracefully shutting down from SIGINT (Ctrl-C)" );
  // some other closing procedures go here
  process.exit(1);
});

Esto funcionó para mí.

También puede buscar otras soluciones mencionadas en el cierre Graceful en NodeJS


1

Motivo de este error

Algún otro proceso ya se está ejecutando en el puerto que ha especificado

Solución simple y rápida

En el sistema operativo Linux, por ejemplo, ha especificado 3000 como el puerto

  • Abre la terminal y corre lsof -i :3000. Si algún proceso ya se está ejecutando en el puerto 3000, verá esta impresión en la consola

COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
node    16615 aegon   13u  IPv6 183768      0t0  TCP *:3000 (LISTEN)

  • Copie el PID (ID de proceso) de la salida

  • Ejecutar sudo kill -9 16615(tienes que poner PID después de -9)

  • Inicie el servidor nuevamente

0

En mi caso también tuve que correr vagrant reload. Incluso sin procesos de nodo que ejecutan mi aplicación express en mi máquina virtual, seguía recibiendo este error hasta que volví a cargar la caja vagabunda.


0

Detenga el servicio que usa ese puerto.

sudo service NAMEOFSERVICE stop

0

En mi caso, el problema fue causado por olvidar llamar next()en una llamada al método expressjs 'use'.

Si el middleware actual no finaliza el ciclo de solicitud-respuesta, debe llamar a next () para pasar el control al siguiente middleware; de ​​lo contrario, la solicitud quedará suspendida.

http://expressjs.com/guide/using-middleware.html




0

Después de matar el mismo proceso varias veces y no poder localizar qué más se estaba ejecutando en el puerto 8000, me di cuenta de que estaba intentando ejecutar en el puerto 8000 dos veces:

Antes de:

MongoClient.connect(db.url, (err, database) => {
  if (err) return console.log(err);
  require('./app/routes')(app, database);

  app.listen(port, () => {
    console.log('We are live on ' + port);
  });
});

require('./app/routes')(app, {});
app.listen(port, () => {
  console.log("We are live on " + port);
});

Después:

MongoClient.connect(db.url, (err, database) => {
  if (err) return console.log(err);
  require('./app/routes')(app, database);

  app.listen(port, () => {
    console.log('We are live on ' + port);
  });
});

require('./app/routes')(app, {});

0

Tuve el mismo problema y descubrí que todavía se estaba ejecutando un proceso de nodejs que había cancelado previamente con CTRL + C. El problema en Windows 10 es que Ctrl + C no mata con gracia nodejs. Abrí el administrador de tareas y eliminé el proceso manualmente. Las soluciones proporcionadas en GitHub no funcionaron para mí.


0

Si usa Windows, puede finalizar el proceso desde el administrador de tareas para node.js


0

Ninguna de las respuestas funcionó para mí.

Cuando reinicié mi computadora, pude poner en funcionamiento el servidor.

Mac
shutdown now -r

Linux
sudo shutdown now -r


0

-> verifique lo que se está ejecutando en el puerto 8080 o cualquier puerto que desee verificar

lsof -i @localhost:8080

si algo se está ejecutando, puede cerrarlo o usar algún comando de matar para cerrarlo


0

Simple, simplemente verifique su terminal en Visual Studio Code Debido a que estaba ejecutando mi aplicación de nodo e hiberne mi computadora portátil y, a la mañana siguiente, enciendo mi computadora portátil nuevamente para el desarrollo de software. Luego ejecuto nuevamente el comando nodemon app.js Primero estaba ejecutándose desde la noche y el segundo ejecutaba mi último comando, por lo que dos mensajes de comando escuchan los mismos puertos, por eso está teniendo este problema. Simple Cierre un terminal o todos los terminales y luego ejecute su nodo app.js o nodemon app.js


0

El puerto que está escuchando ya está siendo escuchado por otro proceso.

Cuando me enfrenté a este error, eliminé el proceso con Windows PowerShell (porque usé Windows)

  1. Lista itemopen el windows powershell
  2. escriba psy luego puede obtener una lista de procesos
  3. encuentre el proceso llamado nodo y observe el ID
  4. escribo Stop-process <Id> pienso que es de ayuda para los usuarios de Windows

0

Me encontré con el mismo problema hoy y el puerto no fue utilizado. El siguiente enfoque ayudó:

rm -rf node_modules && npm cache clean && npm install
npm start

0

SI está en Mac, entonces se trata de IP de x86_64-apple-darwin13.4.0. Si sigue errores, sería algo relacionado con x86_64-apple-darwin13.4.0. Añadir

127.0.0.1 x86_64-apple-darwin13.4.0

al archivo / etc / hosts . Entonces el problema se fue


-1

Simplemente cambie su puerto, podría ser que su puerto actual esté en uso por iis o algún otro servidor.


Esto fue preguntado y respondido hace 4 años con la misma pero mejor respuesta.
George
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.