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.
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
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.
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.
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
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.
J'ai résolu le même problème avec une application express faisant ceci:
trouvez la ligne:
var port = normalizePort (process.env.PORT || '3000');
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