Si j'exécute un serveur avec le port 80 et j'essaie d'utiliser xmlHTTPrequest, j'obtiens cette erreur:Error: listen EADDRINUSE
Pourquoi est-ce un problème pour nodejs, si je veux faire une demande, alors que j'exécute un serveur sur le port 80? Pour les navigateurs, ce n'est pas un problème: je peux surfer sur Internet pendant que le serveur tourne.
Le serveur est:
net.createServer(function (socket) {
socket.name = socket.remoteAddress + ":" + socket.remotePort;
console.log('connection request from: ' + socket.remoteAddress);
socket.destroy();
}).listen(options.port);
Et la demande:
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
la source
la source
Réponses:
EADDRINUSE
signifie que le numéro de port quilisten()
tente de lier le serveur à est déjà utilisé.Donc, dans votre cas, il doit déjà y avoir un serveur sur le port 80.
Si vous avez un autre serveur Web en cours d'exécution sur ce port, vous devez mettre node.js derrière ce serveur et le proxy via lui.
Vous devriez vérifier l'
listening
événement comme celui-ci, pour voir si le serveur écoute vraiment:la source
Ce qui m'a vraiment aidé, c'est:
Mais cela tuera un processus système.
Avec
vous pouvez vérifier si cela a fonctionné.
la source
ps aux | grep node
montrerait cela. Au lieu de tuer l'application avec CTRL + Z , quittez l'application avec CTRL + C . Cela quitte l'application correctement et la liaison de port est supprimée.Ce qui précède
killall -9 node
, suggéré par Patrick fonctionne comme prévu et résout le problème, mais vous voudrez peut-être lire la partie d'édition de cette réponse pour savoir pourquoi cekill -9
n'est peut-être pas la meilleure façon de le faire.En plus de cela, vous voudrez peut-être cibler un seul processus plutôt que de tuer aveuglément tous les processus actifs.
Dans ce cas, obtenez d'abord l'ID de processus (PID) du processus en cours d'exécution sur ce port (disons 8888):
lsof -i tcp:8888
Cela retournera quelque chose comme:
Ensuite, faites (ps - en fait pas . Continuez à lire ci-dessous):
kill -9 57385
Vous pouvez en lire un peu plus ici .
EDIT: Je lisais sur un sujet assez connexe aujourd'hui et suis tombé sur ce fil intéressant sur pourquoi devrais-je pas
kill -9
un processus .Donc, comme indiqué, vous devriez mieux tuer le processus ci-dessus avec:
kill -15 57385
EDIT 2 : Comme indiqué dans un commentaire ici à plusieurs reprises, cette erreur est la conséquence de ne pas quitter un processus avec élégance. Cela signifie, beaucoup de gens quitter une commande de noeud (ou tout autre) en utilisant CTRL + Z . La façon correcte d'arrêter un processus en cours d'exécution est d'émettre la commande CTRL + C qui effectue une sortie propre.
Quitter un processus de la bonne façon libérera ce port pendant la fermeture. Cela vous permettra de redémarrer le processus sans passer par le problème de le tuer vous-même avant de pouvoir le relancer.
la source
pgrep node
indique si un processus de nœud s'est enfui sur vous.pkill node
va les tuer.Juste une remarque, Skype écoutera parfois sur le port 80 et provoquera donc cette erreur si vous essayez d'écouter sur le port 80 à partir de Node.js ou de toute autre application.
Vous pouvez désactiver ce comportement dans Skype en accédant aux options et en cliquant sur Avancé -> Connexion -> Utiliser le port 80 (décochez-le)
la source
Vous devriez essayer de tuer le processus qui écoute sur le port 80.
Killall va tuer toutes les applications de nœuds en cours d'exécution. Vous pourriez ne pas vouloir faire ça. Avec cette commande, vous ne pouvez tuer que la seule application qui écoute sur un port connu.
Si vous utilisez unix, essayez cette commande:
la source
Deux solutions possibles pour Windows / Mac
1. Numéro de port gratuit
les fenêtres
Mac
Vous pouvez essayer netstat
Pour OSX El Capitan et plus récent (ou si votre netstat ne prend pas en charge -p), utilisez lsof
si cela ne résout pas votre problème, les
Mac
utilisateurs peuvent se référer à la discussion complète sur ce problème Trouver (et tuer) le port de verrouillage du processus 3000 sur Mac2. Changer le numéro de port?
les fenêtres
Mac
la source
netstat -ona | findstr ".0:PORT +0.0.0.0:0 +LISTENING" | for /f "tokens=5" %t in ('more') do taskkill /PID:%t /f
Sous un contrôleur env, vous pouvez utiliser:
pkill node
avant d'exécuter votre script devrait faire le travail.Gardez à l'esprit que cette commande tuera tous les
node
processus, ce qui pourrait être correct si vous avez par exemple un conteneur exécutant une seule instance, notre vous avez un tel environnement où vous pouvez le garantir.Dans tout autre scénario, je recommande d'utiliser une commande pour tuer un certain identifiant ou nom de processus que vous avez trouvé en le recherchant par programme. comme si votre processus est appelé, node-server-1 vous pouvez le faire
pkill node-server-1
.Cette ressource peut être utile à comprendre: https://www.thegeekstuff.com/2009/12/4-ways-to-kill-a-process-kill-killall-pkill-xkill/
la source
pgrep node
avant si vous voulez être un peu prudent et voir quelsnode
processus sont en cours d'exécutionVotre application s'exécute déjà sur ce port 8080. Utilisez ce code pour tuer le port et réexécutez votre code
la source
kill -9
est presque certainement exagérée et, à mon avis, un conseil horrible à donner sans avertissements spécifiques sur il. Jekill
ferais probablement l'affaire, et vraiment, le problème fondamental de cette question est, je pense, qu'ils essaient de relancer un serveur encore et encore, donc ce n'est qu'un hack, pas un correctif. Ils doivent avoir une meilleure compréhension de ce qui se passe, ce que cette réponse ne fournit pas vraiment.Une autre chose qui peut donner cette erreur, c'est deux serveurs HTTP dans le même code de nœud. Je mettais à jour du code Express 2 vers Express 3, et j'avais ceci ...
Et, il a déclenché cette erreur.
la source
Cela fonctionne pour moi (j'utilise mac). Exécutez cette commande
lsof -PiTCP -sTCP:LISTEN
Cela va afficher une liste des ports que votre système utilise. Trouvez
PID
que votre nœud est en cours d'exécutionet courir
kill -9 [YOUR_PID]
la source
EADDRINUSE
signifie que le port (que nous essayons d'écouter dans l'application de noeud) est déjà utilisé. Pour surmonter, nous devons identifier le processus en cours d'exécution avec ce port.Par exemple, si nous essayons d'écouter notre application de nœud dans le port 3000. Nous devons vérifier si ce port est déjà utilisé par un autre processus.
étape 1:
Que la commande ci-dessus donne le résultat ci-dessous.
étape 2:
Vous avez maintenant l'ID de processus (25315), tuez ce processus.
étape 3:
Remarque: Cette solution pour les utilisateurs de Linux.
la source
la source
pour tuer de force
utilisez ci-dessus cmd pour tuer un port particulier, puis exécutez votre serveur
la source
Essayez les deux commandes et cela arrêtera tout processus de nœud.
la source
Cette erreur survient lorsque vous avez un processus en cours d'exécution sur un port sur lequel vous souhaitez exécuter votre application.
comment obtenir quel processus s'exécute sur ce port => commande: sudo netstat -ap | grep: 3000
sortie: vous obtiendrez les informations de processus qui utilisent ce port
tcp 0 0 IPaddress: 3000 : LISTEN 26869 / node
Vous pouvez maintenant tuer ce processus sudo kill -9 26869
la source
Dans la commande ci-dessous, remplacez votre portNumber
la source
EADDRINUSE signifie que le port de votre application nodejs est déjà utilisé.
la source
Il existe un moyen de terminer le processus à l'aide du Gestionnaire des tâches:
Accédez au Gestionnaire des tâches (ou en utilisant le raccourci Ctrl+ Shift+ Esc)
Sur "Processus d'arrière-plan", recherchez les processus "Node.js" et terminez-les (faites un clic droit dessus et choisissez "Fin de tâche")
la source
J'ai déjà vu cette erreur (dans le nœud) avec http.client, et si je me souviens bien, le problème était lié à l'initialisation de httpClient ou à la définition de mauvaises options dans la création httpClient et / ou dans la demande d'URL.
la source
J'ai aussi le même problème, et je ferme simplement le terminal et j'ouvre un nouveau terminal et je lance
encore. cela fonctionne pour moi, un certain temps a juste besoin d'attendre quelques secondes jusqu'à ce qu'il fonctionne à nouveau.
Mais cela ne fonctionne que sur une machine développeur au lieu d'une console serveur.
la source
Erreur: écouter EADDRINUSE signifie que le port que vous souhaitez attribuer / lier à votre serveur d'applications est déjà utilisé. Vous pouvez soit attribuer un autre port à votre application.
Ou si vous souhaitez attribuer le même port à l'application. Ensuite, tuez l'application qui s'exécute sur le port souhaité.
Pour une application de nœud, vous pouvez essayer de trouver l'ID de processus pour l'application de nœud en:
Après avoir obtenu l'ID de processus, faites
la source
Sur Debian, j'ai découvert qu'il fonctionnait sur le port 80, vous devez émettre la commande en tant que root, c'est-à-dire
J'espère que ça aide
la source
Dans mon cas, Apache HTTP Server a été exécuté sur le port 80, je l'ai résolu en émettant la commande en tant que root
sudo killall httpd
Mise à jour
Si Jenkin est installé et fonctionne sur votre Mac;
sudo lsof -i tcp:8080
sudo launchctl unload /Library/LaunchDaemons/org.jenkins-ci.plist
la source
Il semble qu'un autre processus Node ng serve soit en cours d'exécution. Vérifiez-le en tapant ceci dans votre console (Linux / Mac):
et quittez-le avec:
OU utiliser alternativement
pour servir votre projet sur un port libre de votre choix.
la source
Tout en tuant le NODE_PORT, cela pourrait tuer votre processus Chrome ou tout ce qui écoute le même port, et c'est ennuyeux.
Ce script shell peut être utile - dans mon cas, le port est 1337 mais vous pouvez le changer à tout moment
la source
Dans mon cas, j’utilise un hébergement web mais c’est la même chose chez l’hôte local, j’ai utilisé:
pour regarder le processus de nœud, la console affiche le processus avec PID. pour tuer le processus, vous devez utiliser cette commande:
où PID est l'ID de processus de la commande ci-dessus.
la source
Deux serveurs ne peuvent pas écouter sur le même port, vérifiez donc si un autre serveur écoute sur le même port, vérifiez également la synchronisation du navigateur s'il fonctionne sur le même port
la source
Pour les autres sur Windows 10 avec noeud as
localhost
et fonctionnant sur un port comme 3500, pas 80 ...Ce qui ne fonctionne pas:
Ce qui affiche des informations mais ne fonctionne toujours pas:
Qu'est-ce qui fonctionne:
Git Bash ou Powershell sur Windows
Remarquez le PID (à l'extrême droite),
je n'ai pas pu me rendre
killall
au travail ... alorsMaintenant, après cet exercice pas si amusant sur Windows, j'ai réalisé que je pouvais utiliser le gestionnaire de tâches et trouver le moteur Node et le terminer.
Pour info, j'utilisais Visual Studio Code pour exécuter Node sur le port 3500, et j'utilise le shell Git Bash à l'intérieur du code VS. J'avais quitté gracieusement avec Ctrl + C, mais parfois cela ne le tue pas. Je ne veux pas changer mon port ou redémarrer donc cela a fonctionné. Espérons que cela aide les autres. Sinon, c'est de la documentation pour moi.
la source
Pour les utilisateurs de Windows, exécutez la commande suivante dans la fenêtre PowerShell pour tuer tous les processus de noeud.
la source
L'option qui fonctionne pour moi:
Courir:
Vous obtiendrez quelque chose comme:
la source