Node.js Le port 3000 est déjà utilisé mais ce n'est pas le cas?

118

Je travaille sur un projet node.js depuis quelques semaines et cela fonctionne très bien. Habituellement, j'utilise npm startpour exécuter mon application et l'afficher dans un navigateur sur localhost, port 3000.

Aujourd'hui, j'ai commencé à recevoir l'erreur suivante lors de l'utilisation de npm start:

Server started on port 3000                                                                                                                                                                                         
Port 3000 is already in use 

J'ai vérifié le moniteur de ressources et je n'ai aucun autre processus en cours d'exécution sur le port 3000. Pourquoi recevrais-je ce message d'erreur?

Dans mon app.js, j'ai le code suivant pour définir le port ... est-ce incorrect? Cela fonctionnait bien avant, donc je ne suis pas sûr de ce que je fais de mal.

// Set Port
app.set('port', (process.env.PORT || 3000));
app.listen(app.get('port'), function() {
    console.log('Server started on port '+app.get('port'));
});

Merci pour l'aide!


ÉDITER:

J'ai essayé d'exécuter netstat et TCPView pour vérifier quel processus utilise le port, mais rien n'utilise ce port. J'ai également essayé de redémarrer mon ordinateur portable mais j'obtiens toujours la même erreur.

user2573690
la source
Il existe un autre procédé qui utilise ce port, c'est certain. Quel OS essayez-vous? Vous pouvez le rechercher sur Google comme `` trouver quel professionnel utilise le port '' pour votre système d'exploitation
tanaydin
1
avez-vous essayé stackoverflow.com/questions/48198/…
Isaac le
1
Le favicon sera mis en cache. Vous pouvez également essayer netstatdans une invite de commande ou vous connecter à localhost: 3000 avec un équivalent telnet - PuTTY, par exemple.
Blorgbeard sort le
5
Je remarque que vous obtenez "Le port 3000 est déjà utilisé" après "Le serveur a démarré sur le port 3000" - est-ce que quelque chose dans votre application tente de recommencer à écouter sur le même port?
Blorgbeard sort le
7
Je suppose que vous avez deux app.listen()déclarations dans votre application sur une autre .listen()qui tente également de démarrer un serveur sur ce port. Le premier fonctionne, le second signale l'erreur. Recherchez votre code pour .listen.
jfriend00

Réponses:

273

Vous pouvez rechercher comment tuer ce processus.

Pour Linux / Mac OS, recherchez (sudo) runceci dans le terminal:

$ lsof -i tcp:3000
$ kill -9 PID

Sous Windows:

netstat -ano | findstr :3000
tskill typeyourPIDhere 

changer tskillpour taskkilldans git bash

Animesh Singh
la source
2
J'ai essayé un certain nombre d'autres solutions sur Windows, mais celle-ci a trouvé le processus étrange qui monopolisait le port. A obtenu un vote pour inclure également l'approche Linux en plus de travailler sur Windows.
truedat101
2
tskill ne fonctionnait pas pour moi sur Windows. taskkill / F / PID myPIDhere - ce travail
snersesyan
2
Je n'obtiens rien avec seulement lsofmais avec sudo lsof j'obtiens quelque chose, et tuer ce processus a résolu ce problème.
user985366
Existe-t-il un moyen d'obtenir dynamiquement le PID pour le processus en cours et de le tuer? Pour une raison quelconque, je dois le faire à chaque fois que je déploie pour produire manuellement. Note latérale, assurez-vous si cela est lié aux PM2 ou non.
S_W
taskkill n'a pas fonctionné pour moi sur git-bash, mais tskill l'a fait. Merci.
nickcamillo
36

Parfois, cela arrive, comme @sova l'a proposé Cela m'arrive parfois, EADDR en cours d'utilisation. En règle générale, une fenêtre de terminal se cache en arrière-plan et exécute toujours l'application. Et c'est aussi vrai avec moi.

Cela arrive, quand vous avez ouvert le terminal pendant longtemps, oui vous avez raison, vous devez arrêter le processus. Mais parfois, cela ne s'arrêtait pas en arrière-plan. La meilleure solution est donc de fermer le terminal et de le redémarrer. Cela résoudra votre problème. parce que dans mon cas, cela fonctionne.

Aussi,

sudo lsof -i:<PORT_NO>

ferme l'instance pour l'heure actuelle mais impossible d'arrêter le processus en arrière-plan. Donc pour une fois,

sudo kill <PID>

fonctionne, mais encore une fois, lorsque nous mettons à jour notre code et sauvegardons, ce problème se reproduit comme avec Nodemon .

Alors quitter le terminal résoudra le problème. OU

  killall -9 node
techyaura
la source
2
Ni lsof ni netstat n'ont renvoyé quoi que ce soit, mais il semblait encore y avoir un processus utilisant le port. Après avoir killall -9 nodepu exécuter le serveur localement.
Julsteri
merci pour la commande killall -9 node. cela a fonctionné sur goorm IDE
ifhy
32

Peut-être que vous pouvez prendre cela comme référence. Cette ligne de commande unique peut tuer le processus en cours d'exécution sur un port donné.

npx kill-port 3000

entrez la description de l'image ici


Pour tuer plusieurs ports.

npx kill-port 3000 8080 4200
Penny Liu
la source
1
cela a fonctionné comme un charme, merci
Aditya Patnaik
22

Pour Windows, le gestionnaire de tâches afficherait certainement un processus de nœud en cours d'exécution. Essayez de tuer le processus, cela résoudra le problème.

PRAKASH THOMAS VARGHESE
la source
22

J'ai eu le même problème. (Les étapes ci-dessous fonctionnent correctement sur Windows 10):

  1. Ouvrez le gestionnaire de tâches (appuyez sur Ctrl+ Alt+ Delete)
  2. Sélectionnez l'onglet 'Processus'
  3. Recherchez "Node.js: JavaScript côté serveur"
  4. Sélectionnez-le et cliquez sur le bouton 'Fin de tâche'

Vous pouvez maintenant courir npm start.

J'espère que cela vous aide.

Mahyar
la source
8

J'ai vu la même chose et essayé toutes les suggestions ci-dessus sans succès. Voici les étapes qui le résolvent pour moi: - désactiver le wifi - démarrer npm (cela devrait fonctionner) - activer le wifi

Je ne sais pas exactement quel est le problème racine, mais cela l'a résolu pour moi.

James Smith
la source
Je viens juste que cela m'arrive aussi. netstat -anon'a rien répertorié utilisant le port 3000.
Nathan
1
Bon sang, cela l'a résolu pour moi aussi car évidemment rien ne fonctionnait sur le port 3000. J'ai commencé à avoir ce problème après une mise à jour de Windows. Jamais pensé à désactiver le WiFi. Merci d'avoir résolu ce problème :)
3Dos
7

J'utilisais un serveur express avec nodemon sur NodeJS. J'ai reçu le message suivant et cela semble être une erreur:

$ node ./bin/www
Port 3000 is already in use

Il existe une solution générale selon laquelle si vous mettez fin à toutes les connexions au serveur de nœuds, vous pouvez ajouter ce code dans votre fichier package.json:

"scripts": {
    "start": "node ./bin/www",
    "stop": "taskkill -f -im node.exe"
},

De plus, j'ai trouvé plusieurs solutions Windows command et bash sur Win 10 x64.

Toutes mes notes sont ici:


# Mettre fin à toutes les connexions au serveur NodeJS

$ taskkill -f -im node.exe
SUCCESS: The process "node.exe" with PID 14380 has been terminated.
SUCCESS: The process "node.exe" with PID 18364 has been terminated.
SUCCESS: The process "node.exe" with PID 18656 has been terminated.

# Exemple: ouvrez le Gestionnaire des tâches de Windows et voyez le numéro PID "node.exe" sous Windows

>> Command Line
$ netstat /?
$ netstat -a -n -o
$ netstat -ano

# Tuer un processus dans Windows par numéro de port (exemple)

Pour aider:

$ taskkill /?
$ tskill /?

Code 1:

$ taskkill -pid 14228
ERROR: The process with PID 14228 could not be terminated.
Reason: This process can only be terminated forcefully (with /F option).

Code 2:

$ taskkill -f -pid 14228
SUCCESS: The process with PID 14228 has been terminated.

Code 3:

$ tskill 14228

# Ligne de commande pour consulter un port spécifique

en cmd:

$ netstat -ano | find "14228"

en bash:

$ netstat -ano | grep "14228" or $ netstat -ano | grep 14228

# Recherchez node.exe à l'aide de la commande "tasklist"

en cmd:

$ tasklist | find "node"

en bash:

$ tasklist | grep node
$ tasklist | grep node.exe
node.exe                     14228 Console                    2     48,156 K
node.exe                     15236 Console                    2     24,776 K
node.exe                     19364 Console                    2     24,428 K
aygunyilmaz
la source
7

Tuer un processus qui possède le port 3000

Tout d'abord, voyons comment nous pouvons tuer un processus qui a un port ouvert.

En utilisant la commande lsof, nous pouvons récupérer le PID qui a le port donné:

$ lsof -i :3000 -t
12345

Ensuite, nous pouvons tuer ce processus simplement en faisant:

$ kill 12345

Transformons cela en une seule ligne:

lsof -i 3000 -t | xargs kill

Si vous utilisez une variable d'environnement pour définir le port du serveur, nous pouvons le spécifier au lieu de coder en dur nos valeurs:

lsof -i ${PORT} -t | xargs kill

Enfin, nous pouvons par défaut sur le port 3000 si la variable d'environnement n'est pas définie:

lsof -i ${PORT:-3000} -t | xargs kill

Obtenir nodemon pour exécuter des hooks

Nodemon vous permet de configurer des hooks d'événement via le fichier de configuration nodemon.json:

{
  "events": {
    "crash": "sh -c 'lsof -i :${PORT:-3000} -t | xargs kill'"
  }
}

Cela obligera nodemon à exécuter sh -c 'lsof -i:${PORT:-3000} -t | xargs kill chaque fois que votre application plante, tuant ainsi le processus enfant qu'elle a engendré et qui maintient le port ouvert.

ou vous pouvez essayer celui-ci

fuser -k PORT-NO/tcp

par exemple:

fuser -k 3000/tcp
Afeesudheen
la source
C'est une solution assez agréable et propre pour tuer un processus. Je dois regarder comment faire cela à chaque fois, et c'est la meilleure solution que j'ai jamais vue!
twknab
Je rencontre ce problème bien qu'aucun processus ne revienne de lsof -i :3000 -t= \
xaunlopez
@xaunlopez essayez celui-ci fuser -k port-number/tcp
Afeesudheen
5

Cela m'arrive parfois, EADDR en cours d'utilisation. En général, une fenêtre de terminal se cache en arrière-plan et exécute toujours l'application. Vous pouvez arrêter le processus avec ctrl + C dans la fenêtre du terminal.

Ou peut-être que vous écoutez le port plusieurs fois à cause de copy / pasta =)

sova
la source
Merci pour l'aide! Je n'ai aucune autre fenêtre de terminal ouverte, que dois-je vérifier d'autre?
user2573690
trouvez n'importe quel nœud ou processus npm et terminez-le. si vous avez toujours un funk, redémarrez la machine ou choisissez simplement un autre port avec lequel travailler. Il n'y a vraiment aucune raison , il doit être le port 3000 ou 8080
Sova
Je viens de créer une nouvelle application de nœud et de la démarrer sur le port 3000 et celle-ci semble fonctionner correctement, mais lorsque j'essaie d'exécuter mon projet existant, cela indique que le port est en cours d'utilisation. Avez-vous déjà eu ce problème?
user2573690
@ user2573690 Je n'ai jamais rencontré cela auparavant, mais peut-être avez-vous plusieurs fichiers js (comme un app.js et un index.js) où l'on appelle .listen()plusieurs fois?
sova
2
Je vous remercie! J'ai réussi à le comprendre, j'écoutais le port plusieurs fois, accident de copie / pâtes! Si vous pouvez modifier votre réponse et ajouter cet élément, je le marquerai. Encore merci!
user2573690
5

Ouvrez le Gestionnaire de tâches (appuyez sur Ctrl + Alt + Suppr Sélectionnez l'onglet 'Processus' Recherchez 'Node.js: JavaScript côté serveur' Sélectionnez-le et cliquez sur le bouton 'Terminer la tâche'

Omar Baksh
la source
2

Venu de Google ici avec une solution pour High Sierra.

Quelque chose a changé dans la configuration réseau de macos et certaines applications (y compris le ping) ne peuvent pas résoudre localhost.

La modification de / etc / hosts semble être une solution:

cmd: sudo nano /etc/hosts/ contenu127.0.0.1 localhost

Ou simplement (si vous êtes sûr que votre / etc / hosts est vide) sudo echo '127.0.0.1 localhost' > /etc/hosts

sznowicki
la source
2

J'ai passé 2h à découvrir pourquoi EADDRINUSEne me permettait pas de lancer une application (les autres serveurs node-express étaient ok) ... cela a commencé à fonctionner après avoir été ajouté lazyConnect: true, à la configuration de la source de données.

Ne me demandez pas pourquoi cela a aidé. Je ne sais pas. Je mets cette information ici juste pour les personnes ayant le même problème.

test30
la source
voté pour la volonté d'aider ET une solution qui peut aider à trouver la cause profonde.
Titou
2

J'ai eu ce problème en utilisant Git Bash sous Windows. Je cours npm start, ou node app.js. Après l'avoir terminé avec Ctrl + C brièvement et essayé de redémarrer le serveur en utilisant npm startounode app.js alors j'obtiens ce message d'erreur.

Cependant, lorsque je fais cela avec l' invite de commande Windows standard , cela fonctionne bien.

Ou vous pouvez le faire d'une autre manière. Ouvrez le Gestionnaire des tâches et recherchez la ligne « Node.js: JavaScript côté serveur ». Sélectionnez cela et terminez la tâche . Cela devrait fonctionner maintenant.

Merci.

Amanullah Aman
la source
2

Si vous ne souhaitez fermer qu'un seul port, exécutez simplement cette commande. kill -9 $(lsof -t -i:3000)

La différence entre pkilletkill est quelqu'un qui traite l'argile. Dans kill, vous appliquez un filtre. vous arrêtez simplement le port que vous voulez.

La pkillcommande ferme tous les processus de nœud. pkill -9 node

Utilisez pkill pour éviter les fuites de mémoire qui se produisent occasionnellement pendant le développement. s'il y a plus d'un nœud, cela les tue tous.

L'utilisation de scripts dans package.json est également illustrée.

"scripts": {
    "server:start": "cd server && yarn start",
    "server:restart": "cd server && yarn restart",
    "frontend:start": "cd frontend && yarn start",
    "frontend:restart": "kill -9 $(lsof -t -i:4200) && yarn start:frontend"
},
"scripts": {
    "start": "nodemon --watch 'src/**/*.ts' --ignore 'src/**/*.spec.ts' --exec 'ts-node' src/index.ts",
    "restart": "pkill -9 node && start",
    "kill": "pkill -9 node"
},
umutyerebakmaz
la source
1

Essayez d'ouvrir l'hôte local dans votre navigateur. Tapez simplement: localhost:3000dans la barre d'adresse.

Si l'application s'ouvre, cela signifie que votre précédente npm runest toujours active. Maintenant, vous pouvez simplement apporter des modifications au code et voir les effets si vous concevez la même application, ou si vous souhaitez exécuter une autre application, modifiez simplement le code (dans index.js de l'application précédemment en cours d'exécution) un peu et ( probablement rafraîchir l'onglet du navigateur) pour le faire planter;) ..... Maintenant, npm run startrecommencez à partir de votre nouveau répertoire d'application. J'espère que cela t'aides! :)

ou

Vous pouvez ouvrir le Gestionnaire des tâches (WINDOWS_KEY + X> Gestionnaire des tâches) et vous verrez la ligne «Node.js: JavaScript côté serveur». Sélectionnez cela et terminez la tâche ... Cela devrait fonctionner maintenant !!



Sinon, modifiez le .envfichier de votre application pour inclure port:3002et exécuter la nouvelle application. Cela vous permettra d'exécuter deux applications distinctes sur des ports différents. À votre santé!!

Mohit Singh
la source
1

Pour les utilisateurs de Windows, arrêtez simplement tous les processus de Node.js dans le Gestionnaire des tâches

J'espère que cela aidera

Muhammad Ashfaq
la source
1

Simple sous Linux

  • Ouvrez votre terminal
  • Port libre des processus -> kill $ (lsof -t -i: $ port)
Oben Desmond
la source
1

J'ai également rencontré le même problème. La meilleure façon de résoudre est (pour Windows) :

  1. Accédez au gestionnaire de tâches .

  2. Faites défiler et recherchez un processus de tâche nommé. Node.js: JavaScript côté serveur Image ajoutée pour référence

  3. Terminez cette tâche particulière.

Voilà! Maintenant, lancez npm et cela fonctionnera comme avant!

Daim_Nickel_Penny
la source
0

Pour les utilisateurs de Windows, vous pouvez utiliser l' outil CurrPorts pour tuer facilement les ports sous utilisation

entrez la description de l'image ici

Zuhair Taha
la source
0

Il peut s'agir d'un processus d'administration exécuté en arrière-plan et netstatne l'affiche pas.
Utilisez tasklist | grep nodepour trouver le PID de ce processus d'administration, puiskill PID

tnoel999888
la source
0

si vous utilisez webstorm, assurez-vous simplement que votre port par défaut n'est pas 3000 à partir du fichier -> paramètres -> Build, Execution, Deployment -> Debugger And there change

Port de serveur intégré

et définissez-le sur "63342" ou consultez cette réponse Modifier le port WebStorm LiveEdit (63342)

Muhammad Saleh
la source
0

Dans les scripts package.json inlcude:

"start": "nodemon app.js --delay 1500ms"

Je crois que le problème était pour moi le moment où l'ancien port ne s'arrêtait pas à temps par nodemon pour le redémarrage. J'ai rencontré le problème en utilisant multer.

Kalkhas
la source
Ajustez le délai au besoin.
Kalkhas
0

Les méthodes server ou app listen () peuvent être ajoutées à 2 endroits. Recherchez les méthodes listen () dans le pour les démarrages de l'application, c'est pourquoi son retour en tant que serveur démarré au port XXXX et au port XXXX déjà utilisé, le message est côte à côte

Anoop George
la source
0

Dans ma situation, je venais de commencer à utiliser VS Code et j'avais suivi un tutoriel utilisant Sequelize. En fin de compte, j'avais un fichier bin / www qui contenait le listen (). Je ne savais pas à ce sujet et j'exécutais mon application en exécutant le nœud app.js, quand cela ne fonctionnait pas, j'ai ensuite ajouté dans le serveur express des éléments avec .listen () (qui fonctionnait bien).

Mais quand j'ai commencé à utiliser nodemon et VSCode, il était pointé sur bin / www et cela nécessitait mon app.js.

Pour faire court, j'avais ajouté .listen () à mon app.js et j'exécutais app.js directement alors que je n'aurais pas dû l'ajouter et exécuter bin / www.

Peter
la source
0

Dans ubuntu, saisissez d'abord le processus en utilisant le numéro de port: sudo lsof -i: 3000 puis utilisez la commande kill pour tuer le processus, par exemple si le processus PID est 4493, utilisez la commande: kill 4493 , pour mac ou Windows, recherchez la commande associée

entrez la description de l'image ici

Seigneur
la source
0

J'ai résolu ce problème parce que MongoDB ou il y a une autre application que vous l'aviez déjà exécutée sur ce port, donc pour le résoudre, tuez le processus du gestionnaire de tâches, ou changez simplement le numéro du port de 3000 à un autre.

Omar Abusabha
la source
0

C'est très simple. Vous pouvez le réparer en 2 étapes faciles.

  1. Vérifiez vos variables d'environnement s'il existe une clé / entrée avec le nom "PORT".
  2. Si trouvé, supprimez cette entrée ou renommez-la en autre chose.

Il s'avère qu'un autre programme utilise cette variable. Habituellement, lorsque vous démarrez react-scripts, il recherchera une variable d'environnement avec ce titre PORT.

Amini-Philips Ogelenye
la source
-1

Avant d'exécuter nodemon, veuillez d'abord démarrer mongod. Vous n'obtiendrez jamais cette erreur. :)

Pratiksha
la source
-2

recherchez tout processus en cours d'exécution sur le même port en entrant la commande:

sudo ps -ef

Vous pouvez trouver le processus en cours d'exécution sur le port de nœud respectif, puis tuer le nœud en

kill -9 <node id>

Si le problème persiste, il suffit de tuer tous les nœuds

killall node
Mahaveer
la source
-3

Tue tous les ports en cours d'exécution (mac):

killall node
Ryan Dhungel
la source