Ich habe folgende ( http://socket.io/get-started/chat/ ) Anleitung zum Erstellen einer einfachen Chat-Anwendung mit socket.io befolgt.
Ich habe jedoch versucht, Express zu verwenden, um es zu erstellen, und ich habe mich gefragt, warum Port 3000 bereits verwendet wird. Der folgende Code funktioniert nicht, wenn ich die Portnummer nicht ändere.
/* Make the http server listen on port 3000. */
http.listen(3000, function(){
console.log('listening on *:3000');
});
Verwendet Express den Port, um andere Dinge wie Routing oder etwas zu tun? Gibt es eine einfache Möglichkeit, um herauszufinden, was an diesem Port passiert?
Ich kann auch etwas zweifelhaft mit meinen geforderten Dingen machen:
var express = require('express');
var app = require('express')();
var http = require('http').Server(app);
var router = express.Router();
var io = require('socket.io')(http);
Vielen Dank.
Ich bin auch auf dieses Problem gestoßen und habe es dadurch gelöst:
Verwenden Sie nicht npm start
, um Ihre Web-App zu starten
Verwenden Sie stattdessen node app.js
Laufen Sie mal:
netstat -anp tcp | grep 3000
Hier sollte der Name des Prozesses angezeigt werden, der Port 3000 verwendet. Hier ist ein weiteres Problem in StackOverflow, das dieses Problem ausführlicher behandelt.
Eine der besten Möglichkeiten, dies während der Entwicklung zu tun, wäre durch IDE = wo Sie umfassendes Debugging durchführen und den Code schrittweise durchgehen können.
Wenn Sie WebStorm verwenden, funktioniert dies. Gehen Sie unter Laufkonfigurationen -> Konfigurationen bearbeiten -> Knoten.js und fügen Sie den app.js
als Knotenparameter hinzu. Weitere Informationen finden Sie in den Screenshots unter dem Pfeil.
Ich hatte (vergessen, dass ich hatte) zuvor ntop installiert, das standardmäßig auch den Port 3000 verwendet und daher den gleichen Fehler wie hier beschrieben erhielt.
Wie andere bereits erwähnt haben, verwenden Sie netstat oder lsof, um den fehlerhaften Dienst zu finden (und vor dem Befehl Sudo anzugeben, um den korrekten Prozessnamen zu erhalten):
Sudo lsof -P | grep ':3000'
- oder -
Sudo netstat -anp tcp | grep 3000
Auf Ubuntu ist der Dienst mit (einfach) deaktiviert:
service ntop stop
Ähnlich wie oben, um npm start
nicht zu verwenden.
Ich habe nodemon und mit expressjs und expressjs generator verwendet. Ich habe nodemon verwendet, um npm start
auszuführen, während npm sich selbst ausführt. node ./NodeApp/bin/www
Also habe ich editiert, damit nodemon node ./NodeApp/bin/www
alleine ausführt, und der Fehler geht weg.
Fazit
Vor
package.json
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "node ./NodeApp/bin/www",
"build": "webpack --watch",
"dev": "nodemon --exec npm start"
},
Nach dem
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"build": "webpack --watch",
"dev": "nodemon --exec node ./NodeApp/bin/www"
},
Nun führe ich meinen Server mit npm run dev
und keinen Fehlern mehr aus.
Ich habe das gleiche Problem mit einer Express-App gelöst:
finde die Zeile:
var port = normalizePort (process.env.PORT || '3000');
ersetze es durch:
var port = normalizePort ('XXXX');
dabei ist XXXX die Portnummer, die Sie verwenden möchten
Dann können Sie npm starten! xD
Ich habe es so gelöst:
npm installiere shelljs
und fügen Sie Code für den Prozess kill nodejs hinzu, bevor Sie den Listen-Port starten
var Shell = require('shelljs');
Shell.exec("pkill nodejs");
Shell.exec("pkill node");
/* Make the http server listen on port 3000. */
http.listen(3000, function(){
console.log('listening on *:3000');
});
für mich hilft 3000 || 3333
, und es ist das Problem behoben