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?
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>
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:
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
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.
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.
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
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>
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 .
cela signifie que votre fichier est en cours d'exécution maintenant. entrez simplement le code ci-dessous et essayez à nouveau:
Sudo pkill node
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
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.
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.
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);
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
Cliquez avec le bouton droit sur le processus en cours et cliquez sur Terminate .
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.
Arrêtez le service utilisant ce port.
Sudo service NAMEOFSERVICE stop
-> 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.
Aucune des réponses n'a fonctionné pour moi.
Lorsque j'ai redémarré mon ordinateur, je pouvais installer le serveur.
Macshutdown now -r
LinuxSudo shutdown now -r
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, {});
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.
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
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)
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.
Vous pouvez également modifier le port de Gruntfile.js et l'exécuter à nouveau.
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.
Si vous utilisez Windows, vous pouvez terminer le processus à partir du gestionnaire de tâches pour node.js.
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
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