web-dev-qa-db-fra.com

ExpressJS - Evénement d'erreur non géré

J'ai créé l'application Expressjs à l'aide des commandes suivantes:

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

Lorsque j'exécute l'application avec: node app.js, j'ai les erreurs suivantes:

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)

Comment le réparer?

162
JR Galia

Vous avez utilisé un autre serveur utilisant le même port que 8080.

Peut-être avez-vous exécuté node app dans un autre shell, fermez-le et exécutez-le à nouveau.

Vous pouvez vérifier le PORT no. est disponible ou n'utilise pas

netstat -tulnp | grep <port no>
377
Glowin

Nous obtenons une erreur similaire lorsque nous exécutons parfois notre application express. Nous devons suivre la même chose dans ce cas. Nous devons vérifier si cela fonctionne dans n'importe quel terminal. Si vous voulez trouver et tuer le processus, procédez comme suit:

  • ps aux | noeud grep
  • Recherchez l'ID de processus (deuxième à gauche):
  • kill -9 PRCOCESS_ID 

OU

Utilisez une seule commande pour fermer tous les processus de noeud en cours d'exécution.

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

Une instance est probablement toujours en cours d'exécution . Cela va le réparer.

killall node

Mise à jour: Cette commande ne fonctionnera que sous Linux/Ubuntu et Mac.

23
TawabG

Si vous êtes sous Linux, ce problème peut également survenir si Nodejs ne s'exécute pas en tant que root.

Changer de ceci:

nodejs /path/to/script.js

Pour ça:

Sudo nodejs /path/to/script.js

Cela m’arrive à moi et aucune des autres suggestions proposées ne résout le problème. Heureusement, je me suis souvenu que le script fonctionnait l'autre jour en tant que root. J'espère que cela aide quelqu'un!

Avertissement: Ce n'est probablement pas la meilleure solution pour un environnement de production. Le démarrage de votre service en tant que root peut introduire des failles de sécurité sur votre serveur/application. Dans mon cas, c'était une solution pour un service local, mais j'encouragerais les autres à passer plus de temps à essayer d'isoler la cause.

13
CauselessEffect

Cela est dû au fait que le port que vous utilisez pour exécuter le script est déjà utilisé . Vous devez arrêter tous les autres noeuds qui utilisent cette publication . Pour cela, vous pouvez vérifier tous les noeuds en 

ps -e

OU pour le processus de noeud uniquement, utilisez ps -ef | grep node Cela vous donnera la liste de tous les processus de noeud avec identifiant 

tuer tous les processus de noeud

Sudo killall -9 node

Ou pour l'identifiant spécifique Sudo kill -9 id

10
Abhinav bhardwaj

J'ai corrigé le bug en changeant le port qui était 

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

et changé en:

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

Le port que le nœud tente d'utiliser peut être déjà utilisé par un autre programme. Dans mon cas, c’était ntop , que j’avais récemment installé. Je devais ouvrir http: // localhost: 3000/ dans un navigateur pour le réaliser. Un autre moyen de trouver le processus est donné ici .

3
Fabien

cela signifie que votre fichier est en cours d'exécution maintenant. entrez simplement le code ci-dessous et essayez à nouveau:

Sudo pkill node
2
a.miadian

events.js: 183 throw er; // événement 'erreur' non géré 

J'ai également eu le même genre de problème et essayé de nombreuses façons, mais finalement, cela fonctionne bien:

npm install [email protected] --save-dev --save-exact

Référez-vous à ce lien pour plus de précisions https://github.com/ionic-team/ionic-cli/issues/2922

2
Janith Udara

Si vous souhaitez utiliser le même numéro de port, saisissez kill % dans le terminal, ce qui supprime le processus d'arrière-plan en cours et libère le port pour une utilisation ultérieure.

2
Suneha Javid

Fermez tous les autres serveurs de noeud en cours d'exécution, même s'ils se trouvent dans d'autres fenêtres de terminal ou sur des ports différents. Cela devrait résoudre le problème.

1
Jake McGuire

Si vous avez essayé de supprimer toutes les instances de nœud et autres services en écoute sur 3000 (la valeur par défaut utilisée par la configuration express squelette) en vain, vous devez vous assurer que votre environnement ne définit pas le port comme inattendu. Sinon, vous obtiendrez probablement la même erreur. Dans le fichier app.js du squelette express, vous remarquerez la ligne 15:

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

Afin de résoudre ce problème, fermez ou fermez le serveur que vous utilisez . Si vous utilisez Eclipse IDE, suivez les instructions

Exécuter> Déboguer

enter image description here

Cliquez avec le bouton droit sur le processus en cours et cliquez sur Terminate .

1
Prashanth Sams

J'ai eu le même problème et j'ai découvert qu'un processus nodejs que j'avais précédemment annulé avec CTRL + C était toujours en cours d'exécution. Le problème dans Windows 10 est que Ctrl + C ne tue pas élégamment nodejs. J'ai ouvert le gestionnaire de tâches et tué le processus manuellement. Les solutions fournies sur GitHub ne fonctionnaient pas pour moi.

0

Arrêtez le service utilisant ce port.

Sudo service NAMEOFSERVICE stop
0
Rick

-> vérifier ce qui est en cours d’exécution sur le port 8080 ou quel que soit le port que vous voulez vérifier

lsof -i @localhost:8080

si quelque chose fonctionne, vous pouvez le fermer ou utiliser une commande kill pour le fermer.

0
rabiaasif

Aucune des réponses n'a fonctionné pour moi.

Lorsque j'ai redémarré mon ordinateur, je pouvais installer le serveur. 

Mac
shutdown now -r

Linux
Sudo shutdown now -r

0
tmmgarcia

Après avoir tué le même processus plusieurs fois et ne parvenant pas à localiser ce qui fonctionnait sur le port 8000, j'ai réalisé que j'essayais de l'exécuter deux fois sur le port 8000:

Avant:

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);
});

Aprè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
Andrew Southard

Dans mon cas, le problème était dû à l’oubli d’appeler next() dans un appel à une méthode expressjs `use '. 

Si le middleware actuel ne termine pas le cycle requête-réponse, il doit appeler next () pour passer le contrôle au middleware suivant, sinon la requête sera laissée en suspens.

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

0
Andrew Dwyer

Raison de cette erreur

Un autre processus est déjà en cours d'exécution sur le port que vous avez spécifié

Solution simple et rapide

Sous Linux, par exemple, vous avez spécifié 3000 comme port

  • Ouvrez le terminal et lancez lsof -i :3000. Si un processus est déjà en cours d'exécution sur le port 3000, vous verrez cette impression sur la console.
COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
node    16615 aegon   13u  IPv6 183768      0t0  TCP *:3000 (LISTEN)
  • Copier le PID (ID de processus) de la sortie

  • Exécutez Sudo kill -9 16615 (vous devez mettre le PID après -9)

  • Redémarrez le serveur
0
Hadi Mir

Cela a fonctionné pour moi.

http://www.codingdefined.com/2015/09/how-to-solve-nodejs-error-listen.html

Il suffit de changer le numéro de port dans les propriétés du projet.

0
mukulsharma1146

Vous pouvez également modifier le port de Gruntfile.js et l'exécuter à nouveau.

0
Narendra Solanki

Dans mon cas, j'ai aussi dû exécuter vagrant reload. Même sans processus de nœud exécutant mon application express sur ma machine virtuelle, je rencontrais toujours cette erreur jusqu'au rechargement de la boîte vagrant.

0
cbaigorri

Si vous utilisez Windows, vous pouvez terminer le processus à partir du gestionnaire de tâches pour node.js.

0
CodeRider

En réalité, les touches Ctrl + C ne libèrent pas le port utilisé par le processus de noeud. Donc, il y a cette erreur . La résolution du problème utilisait l'extrait de code suivant dans server.js:

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

Cela a fonctionné pour moi.

Vous pouvez également rechercher d'autres solutions mentionnées à Arrêt progressif dans NodeJS

0
Pankaj Shinde

Il suffit de vérifier votre terminal dans Visual Studio Code, car j’exécutais mon application de nœud et j’ai mis mon ordinateur en veille, puis le lendemain matin, j’allume mon ordinateur portable pour le développement de logiciels. Ensuite, j’exécute à nouveau la commande nodemon app.js. La première fois, elle fonctionnait à partir de la nuit et la seconde exécutait ma dernière commande. Deux invites de commande écoutaient les mêmes ports, c’est pourquoi vous rencontrez ce problème. Simple Fermez un termianl ou tous les terminaux, puis exécutez votre noeud app.js ou nodemon app.js

0
zaib