Ich arbeite seit einigen Wochen mit einem node.js-Projekt und es hat großartig funktioniert. Normalerweise verwende ich npm start
meine App, um sie in einem Browser auf localhost, Port 3000, anzuzeigen und anzuzeigen.
Heute habe ich bei der Verwendung von npm start den folgenden Fehler erhalten:
Server started on port 3000
Port 3000 is already in use
Ich habe den Ressourcenmonitor überprüft und auf Port 3000 wird kein anderer Prozess ausgeführt. Warum wird diese Fehlermeldung angezeigt?
In meiner app.js habe ich den folgenden Code, um den Port festzulegen ... ist das falsch? Es hat vorher gut funktioniert, also bin ich mir nicht sicher, was ich falsch mache.
// Set Port
app.set('port', (process.env.PORT || 3000));
app.listen(app.get('port'), function() {
console.log('Server started on port '+app.get('port'));
});
Danke für die Hilfe!
BEARBEITEN:
Ich habe versucht, netstat und TCPView auszuführen, um zu überprüfen, welcher Prozess den Port verwendet, aber dieser Port wird nicht verwendet. Ich habe auch versucht, meinen Laptop neu zu starten, aber ich erhalte immer noch den gleichen Fehler.
quelle
netstat
über eine Eingabeaufforderung versuchen oder eine Verbindung zu localhost: 3000 mit einem Telnet-Äquivalent herstellen - beispielsweise PuTTY.app.listen()
Anweisungen in Ihrer App auf einer anderen haben.listen()
, die ebenfalls versucht, einen Server auf diesem Port zu starten. Der erste funktioniert, der zweite meldet den Fehler. Suchen Sie Ihren Code nach.listen
.Antworten:
Sie können suchen, wie Sie diesen Prozess beenden können.
Für Linux / Mac OS suchen Sie
(sudo) run
dies im Terminal:Unter Windows:
ändern
tskill
fürtaskkill
in git bashquelle
lsof
abersudo lsof
ich bekomme etwas, und das Beenden dieses Prozesses löste dieses Problem.Manchmal passiert es, wie @sova vorgeschlagen hat. Dies passiert mir manchmal, wenn EADDR verwendet wird. Normalerweise versteckt sich im Hintergrund ein Terminalfenster, in dem die App noch ausgeführt wird. Und das stimmt auch mit mir.
Es passiert, wenn Sie das Terminal für lange Zeit geöffnet haben, ja, Sie haben Recht, Sie haben den Prozess gestoppt. Aber manchmal hörte es nicht im Hintergrund auf. Die beste Lösung ist also, dass Sie das Terminal schließen und erneut starten. Es wird Ihr Problem lösen. weil es in meinem Fall funktioniert.
Ebenfalls,
Schließen Sie die Instanz für die aktuelle Zeit, können Sie den Vorgang jedoch nicht im Hintergrund stoppen. Also einmal
funktioniert, aber wenn wir unseren Code aktualisieren und speichern, tritt dieses Problem erneut auf, wie bei Nodemon .
Wenn Sie das Terminal verlassen, wird das Problem behoben. ODER
quelle
killall -9 node
ich den Server lokal ausführen konnte.Für Windows würde der Task-Manager definitiv einen Knotenprozess anzeigen, der ausgeführt wird. Versuchen Sie, den Prozess zu beenden, es wird das Problem lösen.
quelle
Ich hatte das gleiche Problem. (Die folgenden Schritte funktionieren unter Windows 10 einwandfrei.)
Jetzt kannst du rennen
npm start
.Hoffe es hilft dir.
quelle
Vielleicht können Sie dies als Referenz nehmen. Diese einzelne Befehlszeile kann den Prozess beenden, der auf einem bestimmten Port ausgeführt wird.
Mehrere Ports töten.
quelle
Ich habe das Gleiche gesehen und alle oben genannten Vorschläge ohne Erfolg ausprobiert. Hier sind Schritte, die das Problem für mich lösen: - WLAN ausschalten - npm starten (dies sollte funktionieren) - WLAN einschalten
Ich bin mir nicht ganz sicher, was das Grundproblem ist, aber das hat es für mich gelöst.
quelle
netstat -ano
hat nichts mit Port 3000 aufgelistet.Beenden eines Prozesses, dem Port 3000 gehört
Schauen wir uns zunächst an, wie wir einen Prozess beenden können, bei dem ein Port geöffnet ist.
Mit dem Befehl lsof können wir die PID mit dem angegebenen Port abrufen:
Dann können wir diesen Prozess beenden, indem wir Folgendes tun:
Lassen Sie uns dies in einen Einzeiler verwandeln:
Wenn Sie eine Umgebungsvariable zum Festlegen des Serverports verwenden, können Sie Folgendes angeben, anstatt unsere Werte fest zu codieren:
Zuletzt können wir standardmäßig Port 3000 verwenden, wenn die Umgebungsvariable nicht festgelegt ist:
Nodemon dazu bringen, Hooks auszuführen
Mit Nodemon können Sie Ereignis-Hooks über die Konfigurationsdatei nodemon.json einrichten:
Dies führt dazu, dass nodemon den
${PORT:-3000} -t | xargs
Befehl sh -c 'lsof -i: kill ausführt , wenn Ihre App abstürzt, wodurch der untergeordnete Prozess beendet wird, der den Port offen hält.oder du kannst es versuchen
z.B:
quelle
lsof -i :3000 -t
fuser -k port-number/tcp
Ich habe einen Express-Server mit nodemon auf NodeJS verwendet. Ich habe die folgende Meldung erhalten und es scheint ein Fehler zu sein:
Es gibt eine allgemeine Lösung: Wenn Sie alle Knotenserververbindungen beenden, können Sie diesen Code in Ihre Datei package.json einfügen:
Darüber hinaus habe ich mehrere Lösungen gefunden, Windows-Befehl und Bash auf Win 10 x64.
Alle meine Notizen sind hier:
# Beenden Sie alle NodeJS-Serververbindungen
# Beispiel: Öffnen Sie den Windows Task-Manager und sehen Sie die PID-Nummer "node.exe" unter Windows
# Beenden Sie einen Prozess in Windows anhand der Portnummer (Beispiel)
Für Hilfe:
Code 1:
Code 2:
Code 3:
# Befehlszeile zum Anzeigen eines bestimmten Ports
in cmd:
in bash:
# Suchen Sie node.exe mit dem Befehl "tasklist"
in cmd:
in bash:
quelle
Das passiert mir manchmal, EADDR im Einsatz. Normalerweise versteckt sich im Hintergrund ein Terminalfenster, in dem die App noch ausgeführt wird. Sie können den Vorgang mit Strg + C im Terminalfenster stoppen.
Oder vielleicht hören Sie den Port aufgrund von copy / pasta =) mehrmals ab
quelle
.listen()
mehrmals aufruft ?Öffnen Sie den Task-Manager (drücken Sie Strg + Alt + Entf. Wählen Sie die Registerkarte "Prozesse". Suchen Sie nach "Node.js: Serverseitiges JavaScript". Wählen Sie diese aus und klicken Sie auf die Schaltfläche "Aufgabe beenden"
quelle
Kam von Google hierher mit einer Lösung für High Sierra.
Im Netzwerk-Setup von Macos hat sich etwas geändert, und einige Apps (einschließlich Ping) können localhost nicht auflösen.
Das Bearbeiten von / etc / hosts scheint eine Lösung zu sein:
cmd:
sudo nano /etc/hosts/
Inhalt127.0.0.1 localhost
Oder einfach (wenn Sie sicher sind, dass Ihre / etc / hosts leer ist)
sudo echo '127.0.0.1 localhost' > /etc/hosts
quelle
Ich habe 2 Stunden damit verbracht herauszufinden, warum
EADDRINUSE
ich keine ApplazyConnect: true,
starten durfte (andere Node-Express-Server waren in Ordnung ) ... sie funktionierte nach dem Hinzufügen zur Datenquellenkonfiguration.Frag mich nicht, warum es geholfen hat. Ich weiß nicht. Ich stelle diese Informationen hier nur für Leute bereit, die das gleiche Problem haben.
quelle
Ich habe dieses Problem mit Git Bash unter Windows. Ich renne
npm start
odernode app.js
. Nachdem es mit Strg + C kurz beendet und versuchte , den Server erneut verwenden zu beginnennpm start
odernode app.js
dann diese Fehlermeldung erhielt ich.Wenn ich dies mit der regulären Windows-Eingabeaufforderung mache , funktioniert es jedoch einwandfrei.
Oder Sie können es auf andere Weise tun. Öffnen Sie den Task-Manager und suchen Sie die Zeile " Node.js: Serverseitiges JavaScript ". Wählen Sie das aus und beenden Sie die Aufgabe . Es sollte jetzt funktionieren.
Vielen Dank.
quelle
Wenn Sie nur einen Port schließen möchten, führen Sie einfach diesen Befehl aus.
kill -9 $(lsof -t -i:3000)
Der Unterschied zwischen
pkill
undkill
ist jemand Prozess Ton. In kill wenden Sie einen Filter an. Sie stoppen einfach den gewünschten Port.Der
pkill
Befehl schließt alle Knotenprozesse.pkill -9 node
Verwenden Sie pkill, um Speicherverluste zu vermeiden, die gelegentlich während der Entwicklung auftreten. Wenn es mehr als einen Knoten gibt, werden alle getötet.
Die Verwendung von Skripten in package.json wird ebenfalls veranschaulicht.
quelle
Versuchen Sie, den localhost in Ihrem Browser zu öffnen. Geben Sie einfach:
localhost:3000
in die Adressleiste ein.Wenn die App geöffnet wird, bedeutet dies, dass Ihre vorherige
npm run
noch aktiv ist. Jetzt können Sie einfach Änderungen am Code vornehmen und die Auswirkungen sehen, wenn Sie dieselbe App entwerfen oder wenn Sie eine andere App ausführen möchten. Ändern Sie einfach den Code (in index.js der zuvor ausgeführten App) ein wenig und ( Aktualisiere wahrscheinlich die Browser-Registerkarte), um sie zum Absturz zu bringen;) ..... Jetzt starte sienpm run start
erneut aus deinem neuen App-Verzeichnis. Hoffe das hilft! :) :)oder
Sie können den Task-Manager (WINDOWS_KEY + X> Task-Manager) öffnen und sehen die Zeile "Node.js: Serverseitiges JavaScript". Wählen Sie das aus und beenden Sie die Aufgabe .... Es sollte jetzt funktionieren !!
Wenn nicht, ändern Sie die
.env
Datei Ihrer App, umport:3002
die neue App einzuschließen, und führen Sie sie aus. Auf diese Weise können Sie zwei separate Apps an verschiedenen Ports ausführen. Prost!!quelle
Hoffe es wird helfen
quelle
Einfach unter Linux
quelle
Ich bin auch auf das gleiche Problem gestoßen. Der beste Weg zur Lösung ist (für Windows) :
Gehen Sie zum Task-Manager .
Scrollen Sie und suchen Sie einen Aufgabenprozess mit dem Namen. Node.js: Serverseitiges JavaScript
Beenden Sie diese spezielle Aufgabe.
Los geht's! Jetzt npm starten und es wird wie bisher funktionieren!
quelle
Für Windows-Benutzer können Sie das CurrPorts- Tool verwenden, um verwendete Ports einfach zu beenden
quelle
Möglicherweise handelt es sich um einen Verwaltungsprozess, der im Hintergrund ausgeführt wird und
netstat
dies nicht anzeigt.Verwenden Sie
tasklist | grep node
, um die PID dieses Administrationsprozesses zu ermitteln und dannkill PID
quelle
Wenn Sie Webstorm verwenden, stellen Sie einfach sicher, dass Ihr Standardport nicht 3000 aus Datei -> Einstellungen -> Erstellen, Ausführen, Bereitstellen -> Debugger ist
und setzen Sie es auf "63342" oder sehen Sie diese Antwort WebStorm LiveEdit Port ändern (63342)
quelle
In package.json-Skripten enthalten:
Ich glaube, das Problem war für mich die Zeit, in der der alte Port nicht rechtzeitig von nodemon für den Neustart heruntergefahren wurde. Ich habe das Problem mit Multer erlebt.
quelle
An zwei Stellen können Server- oder App-Listen () -Methoden hinzugefügt werden. Suchen Sie in den Starts der Anwendung nach listen () -Methoden. Aus diesem Grund wurde die Rückkehr als Server an Port XXXX und Port XXXX gestartet, die bereits verwendet werden
quelle
Unter meinen Umständen hatte ich gerade angefangen, VS Code zu verwenden, und war einem Tutorial mit Sequelize gefolgt. Am Ende hatte ich eine bin / www-Datei, in der sich listen () befand. Ich wusste nichts davon und führte meine App aus, indem ich den Knoten app.js ausführte. Wenn es nicht funktionierte, fügte ich den Express-Server mit .listen () hinzu (was gut funktionierte).
Aber als ich anfing, nodemon und VSCode zu verwenden, wurde auf bin / www gezeigt und das erforderte meine app.js.
Lange Rede, kurzer Sinn, ich hatte meiner app.js .listen () hinzugefügt und führte app.js direkt aus, wenn ich das nicht hätte hinzufügen und bin / www ausführen sollen.
quelle
In Ubuntu greifen Sie zuerst auf den Prozess zu, indem Sie die Portnummer verwenden: sudo lsof -i: 3000, und verwenden Sie dann den Befehl kill, um den Prozess zu beenden. Wenn die Prozess-PID beispielsweise 4493 lautet, verwenden Sie den Befehl use: kill 4493 , für Mac oder Windows suchen Sie den zugehörigen Befehl
quelle
Ich habe dieses Problem gelöst, weil die MongoDB oder eine andere App, die Sie zuvor auf diesem Port ausgeführt haben, den Prozess vom Task-Manager abbricht oder einfach die Nummer des Ports von 3000 auf eine andere ändert.
quelle
Es ist sehr einfach. Sie können es in 2 einfachen Schritten beheben.
Es stellt sich heraus, dass ein anderes Programm diese Variable verwendet. Wenn Sie React-Skripte starten, wird normalerweise nach einer Umgebungsvariablen mit dem Titel PORT gesucht.
quelle
Bevor Sie nodemon ausführen, starten Sie bitte zuerst mongod. Sie werden diesen Fehler niemals erhalten. :) :)
quelle
Überprüfen Sie, ob auf demselben Port ein Prozess ausgeführt wird, indem Sie den folgenden Befehl eingeben:
Sie können den Prozess finden, der auf dem jeweiligen Knotenport ausgeführt wird, und dann den Knoten durch beenden
Wenn das Problem weiterhin besteht, töten Sie einfach den gesamten Knoten
quelle
Tötet alle laufenden Ports (Mac):
quelle