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?

JR Galia
fuente
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>
Glowin
fuente
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
monical
fuente
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.

TawabG
fuente
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.

Efecto sin causa
fuente
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

Abhinav bhardwaj
fuente
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>
marcdahan
fuente
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 .

Fabien
fuente
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.

Suneha Javid
fuente
2

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

sudo pkill node
Abolfazl Miadian
fuente
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.

Jake McGuire
fuente
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);
marca
fuente
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 .

Prashanth Sams
fuente
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

Janith Udara
fuente
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

Pankaj Shinde
fuente
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
Hadi Mir
fuente
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.

cbaigorri
fuente
0

Detenga el servicio que usa ese puerto.

sudo service NAMEOFSERVICE stop
Almiar
fuente
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

Andrew Dwyer
fuente
0

También puede cambiar el puerto de Gruntfile.js y ejecutarlo nuevamente.

Narendra Solanki
fuente
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, {});
Andrew Southard
fuente
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í.

Gregor Weichbrodt
fuente
0

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

CodeRider
fuente
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

tiagomenegaz
fuente
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

rabiaasif
fuente
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

zaib
fuente
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
Anush
fuente
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
seb_dom
fuente
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

Shravan
fuente
-1

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

Akash
fuente
Esto fue preguntado y respondido hace 4 años con la misma pero mejor respuesta.
George