web-dev-qa-db-fra.com

node.js express socket.io port 3000 utilisé

J'ai suivi ce tutoriel ( http://socket.io/get-started/chat/ ) sur la création d'une application de discussion simple à l'aide de socket.io.

J'ai toutefois essayé d'utiliser Express pour le créer et je me demandais pourquoi le port 3000 est déjà utilisé. Le code ci-dessous ne fonctionnera que si je change le numéro de port.

/* Make the http server listen on port 3000. */
http.listen(3000, function(){
 console.log('listening on *:3000');
});

Express utilise-t-il le port pour effectuer d'autres tâches, telles que le routage ou autre chose? Existe-t-il un moyen simple de savoir ce qui se passe sur ce port?

Je peux aussi faire quelque chose de louche avec mes choses à faire:

var express = require('express');
var app = require('express')();
var http = require('http').Server(app);
var router = express.Router();
var io = require('socket.io')(http);

Merci.

13
himahimahima

J'ai rencontré ce problème aussi et je l'ai résolu par ceci:

N'utilisez pas npm start pour démarrer votre application Web

Utilisez node app.js à la place

25
Li Ethan

Essayez de courir:

netstat -anp tcp | grep 3000

Cela devrait vous montrer le nom du processus qui utilise le port 3000. Voici un autre problème sur StackOverflow qui couvre ce problème plus en profondeur.

12
Brian Tovar

Une des meilleures façons de procéder pendant le développement consiste à utiliser IDE où vous pouvez effectuer un débogage complet et parcourir le code. 

Si vous utilisez WebStorm, cela fonctionne. Dans les configurations d’exécution -> Modifier les configurations -> Nods.js et ajoutez le app.js en tant que paramètre de noeud. Voir la flèche ci-dessous dans les captures d'écran pour plus de détails. 

 enter image description here

4
Gajen Sunthara

J'avais (oublié que j'avais) déjà installé ntop , qui utilise également par défaut le port 3000, et obtenait donc la même erreur que celle décrite ici.

Comme d'autres l'ont mentionné, utilisez netstat ou lsof pour trouver le service incriminé (et préfixez Sudo à la commande pour obtenir le nom de processus correct):

Sudo lsof -P | grep ':3000'

- ou -

Sudo netstat -anp tcp | grep 3000

Sur Ubuntu, le service est désactivé avec (simplement):

service ntop stop
2
Dan0

Semblable à la réponse ci-dessus de ne pas utiliser npm start

J'utilisais nodemon et avec expressjs et le générateur expressjs. J'utilisais nodemon pour exécuter npm start, alors que npm se lance lui-même, exécute node ./NodeApp/bin/www

J'ai donc édité pour que nodemon exécute node ./NodeApp/bin/www par lui-même et cette erreur disparaisse.

Conclusion

Avant

package.json

"scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "node ./NodeApp/bin/www",
    "build": "webpack --watch",
    "dev": "nodemon --exec npm start"
},

Après

"scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "build": "webpack --watch",
    "dev": "nodemon --exec node ./NodeApp/bin/www"
},

Alors maintenant, je lance mon serveur avec npm run dev et plus d’erreurs.

2
cjmling

J'ai résolu le même problème avec une application express faisant ceci:

  1. Editez le fichier "yourap/bin/www"
  2. trouvez la ligne: 

    var port = normalizePort (process.env.PORT || '3000'); 

  3. remplacez-le par:

    var port = normalizePort ('XXXX');

où XXXX est le numéro de port que vous souhaitez utiliser

Alors vous êtes libre de faire npm start ! xD

pour moi, ça aide d'utiliser 3000 || 3333, et ça règle le problème

0
chavy