it-swarm.com.de

ExpressJS - throw er Nicht behandeltes Fehlerereignis

Ich habe die Anwendung expressjs mit den folgenden Befehlen erstellt:

express -e folderName
npm install ejs --save
npm install

Wenn ich die Anwendung mit: node app.js starte, habe ich folgende Fehler:

events.js:72
    throw er; // Unhandled 'error' event
          ^
Error: listen EADDRINUSE
    at errnoException (net.js:884:11)
    at Server._listen2 (net.js:1022:14)
    at listen (net.js:1044:10)
    at Server.listen (net.js:1110:5)
    at Object.<anonymous> (folderName/app.js:33:24)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)

Wie man es repariert?

162
JR Galia

Sie hatten einen anderen Server verwendet, der denselben Port wie 8080 verwendet.

Vielleicht hatten Sie node app in einer anderen Shell ausgeführt. Schließen Sie es und führen Sie es erneut aus.

Sie können PORT-Nr. Überprüfen. ist verfügbar oder verwendet nicht

netstat -tulnp | grep <port no>
377
Glowin

Eine ähnliche Fehlermeldung wird angezeigt, wenn wir manchmal unsere Express-App ausführen. In diesem Fall müssen wir dasselbe befolgen. Wir müssen überprüfen, ob es in einem Terminal läuft. Wenn Sie den Prozess suchen und beenden möchten, gehen Sie folgendermaßen vor:

  • ps aux | grep-knoten
  • Finden Sie die Prozess-ID (zweite von links):
  • kill -9 PRCOCESS_ID 

ODER

Verwenden Sie einen einzigen Befehl, um alle laufenden Knotenprozesse zu schließen.

ps aux | awk '/node/{print $2}' | xargs kill -9
56
monical

Wahrscheinlich läuft noch eine Instanz ..__, dies wird behoben.

killall node

Update: Dieser Befehl funktioniert nur unter Linux/Ubuntu & Mac.

23
TawabG

Wenn Sie unter Linux arbeiten, kann dieses Problem auch auftreten, wenn Nodejs nicht als Root ausgeführt wird.

Ändern Sie von hier aus:

nodejs /path/to/script.js

Zu diesem:

Sudo nodejs /path/to/script.js

Ist mir gerade passiert und keiner der anderen Vorschläge hier hat es korrigiert. Zum Glück fiel mir ein, dass das Skript neulich funktionierte, als ich als root arbeitete. Hoffe das hilft jemandem!

Haftungsausschluss: Dies ist wahrscheinlich nicht die beste Lösung für eine Produktionsumgebung. Wenn Sie Ihren Dienst als Root starten, kann dies zu Sicherheitslücken bei Ihrem Server/Ihrer Anwendung führen. In meinem Fall war dies eine Lösung für einen lokalen Dienst, aber ich würde andere dazu ermutigen, etwas mehr Zeit damit zu verbringen, die Ursache herauszufinden.

13
CauselessEffect

Dies ist darauf zurückzuführen, dass der Port, den Sie zum Ausführen des Skripts verwenden, bereits verwendet wird . Sie müssen alle anderen Knoten stoppen, die diesen Beitrag verwenden ..__ 

ps -e

ODER für Knotenprozesse verwenden Sie nur ps -ef | grep node Dadurch erhalten Sie die Liste aller Knotenprozesse mit der ID 

alle Knotenprozesse abbrechen

Sudo killall -9 node

Oder für die spezifische ID Sudo kill -9 id

10

Ich habe den Fehler behoben, indem ich den Port geändert habe 

app.set('port', process.env.PORT || 3000);<br>

und geändert in:

app.set('port', process.env.PORT || 8080);<br>
7
marcdahan

Der zu verwendende Port-Knoten kann bereits von einem anderen Programm verwendet werden. In meinem Fall war es ntop , das ich kürzlich installiert hatte. Ich musste http: // localhost: 3000/ in einem Browser öffnen, um es zu realisieren. Eine andere Möglichkeit, den Prozess zu finden, ist hier .

3
Fabien

dies bedeutet, dass Ihre Datei jetzt läuft. Geben Sie einfach den Code ein und versuchen Sie es erneut:

Sudo pkill node
2
a.miadian

events.js: 183 werfen er; // Nicht behandeltes 'error' event 

Ich habe auch das gleiche Problem und habe viele Möglichkeiten ausprobiert, aber schließlich habe ich das bekommen, das funktioniert gut:

npm install [email protected] --save-dev --save-exact

Weitere Informationen finden Sie unter diesem Link https://github.com/ionic-team/ionic-cli/issues/2922

2
Janith Udara

Wenn Sie dieselbe Portnummer verwenden möchten, geben Sie im Terminal kill % ein. Dadurch wird der aktuelle Hintergrundprozess abgebrochen und der Port für die weitere Verwendung freigegeben.

2
Suneha Javid

Schließen Sie alle anderen Knotenserver, die ausgeführt werden, auch wenn sie sich in anderen Terminalfenstern befinden oder auf anderen Ports ausgeführt werden. Das sollte das Problem beheben.

1
Jake McGuire

Wenn Sie versucht haben, alle Knoteninstanzen und andere Dienste, die auf 3000 (der Standardeinstellung für das Express-Skelett-Setup) verwendet werden, ohne Erfolg zu beenden, sollten Sie sicherstellen, dass in Ihrer Umgebung "Port" nicht als unerwartet definiert wird. Andernfalls erhalten Sie wahrscheinlich die gleiche Fehlermeldung. In der app.js-Datei des Express-Skeletons sehen Sie Zeile 15:

app.set('port', process.env.PORT || 3000);
1
Mark

Um dies zu beheben, beenden oder schließen Sie den Server, den Sie ausführen ... Wenn Sie die Eclipse-IDE verwenden, folgen Sie diesen Anweisungen.

Run> Debuggen

enter image description here

Klicken Sie mit der rechten Maustaste auf den laufenden Prozess und klicken Sie auf Terminate .

1
Prashanth Sams

Ich hatte das gleiche Problem und stellte fest, dass ein Node-Prozess, den ich zuvor mit STRG + C abgebrochen hatte, noch läuft. Das Problem in Windows 10 ist, dass Ctrl + C nicht auf grausame Weise nodejs tötet. Ich öffnete den Task-Manager und brach den Prozess manuell ab. Die Lösungen auf GitHub haben für mich nicht funktioniert.

0

Beenden Sie den Dienst, der diesen Port verwendet.

Sudo service NAMEOFSERVICE stop
0
Rick

-> Überprüfen Sie, was auf Port 8080 läuft oder welchen Port Sie überprüfen möchten

lsof -i @localhost:8080

wenn etwas läuft, kannst du es schließen oder mit einem kill-Befehl schließen

0
rabiaasif

Keine der Antworten funktionierte für mich.

Als ich meinen Computer neu startete, konnte ich den Server zum Laufen bringen. 

Mac
shutdown now -r

Linux
Sudo shutdown now -r

0
tmmgarcia

Nachdem ich den gleichen Prozess mehrmals getötet hatte und nicht feststellen konnte, was sonst auf Port 8000 lief, wurde mir klar, dass ich versuchte, zweimal auf Port 8000 zu laufen:

Vor:

MongoClient.connect(db.url, (err, database) => {
  if (err) return console.log(err);
  require('./app/routes')(app, database);

  app.listen(port, () => {
    console.log('We are live on ' + port);
  });
});

require('./app/routes')(app, {});
app.listen(port, () => {
  console.log("We are live on " + port);
});

Nach dem:

MongoClient.connect(db.url, (err, database) => {
  if (err) return console.log(err);
  require('./app/routes')(app, database);

  app.listen(port, () => {
    console.log('We are live on ' + port);
  });
});

require('./app/routes')(app, {});
0
Andrew Southard

In meinem Fall wurde das Problem dadurch verursacht, dass vergessen wurde, next() in einem Aufruf der expressjs "use" -Methode aufzurufen. 

Wenn die aktuelle Middleware den Request-Response-Zyklus nicht beendet, muss next () aufgerufen werden, um die Kontrolle an die nächste Middleware zu übergeben. Andernfalls bleibt die Anfrage hängen.

http://expressjs.com/guide/using-middleware.html

0
Andrew Dwyer

Grund für diesen Fehler

Auf dem angegebenen Port wird bereits ein anderer Prozess ausgeführt

einfache und schnelle Lösung

Unter Linux haben Sie beispielsweise 3000 als Port angegeben

  • Öffnen Sie das Terminal und führen Sie lsof -i :3000 aus. Wenn auf Port 3000 bereits ein Prozess ausgeführt wird, wird dieser auf der Konsole gedruckt
COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
node    16615 aegon   13u  IPv6 183768      0t0  TCP *:3000 (LISTEN)
  • Kopieren Sie die PID (Prozess-ID) aus der Ausgabe

  • Führe Sudo kill -9 16615 aus (du musst die PID nach -9 setzen)

  • Starten Sie den Server erneut
0
Hadi Mir

Das hat bei mir funktioniert.

http://www.codingdefined.com/2015/09/how-to-solve-nodejs-error-listen.html

Ändern Sie einfach die Portnummer in den Projekteigenschaften.

0
mukulsharma1146

Sie können den Port auch von Gruntfile.js aus ändern und erneut ausführen.

0

In meinem Fall musste ich auch vagrant reload laufen lassen. Selbst wenn keine Knotenprozesse meine Express-App in meiner virtuellen Maschine ausführen, wurde diese Fehlermeldung immer noch angezeigt, bis die Vagrant-Box erneut geladen wurde.

0
cbaigorri

Wenn Sie Windows verwenden, können Sie den Prozess vom Task-Manager für node.js beenden

0
CodeRider

Tatsächlich geben die Tasten Strg + C den vom Knotenprozess verwendeten Port nicht frei. Es gibt also diesen Fehler .. Die Lösung des Problems bestand in der Verwendung des folgenden Code-Snippets in server.js:

process.on('SIGINT', function() {
  console.log( "\nGracefully shutting down from SIGINT (Ctrl-C)" );
  // some other closing procedures go here
  process.exit(1);
});

Das hat bei mir funktioniert.

Sie können auch nach anderen Lösungen suchen, die unter Graceful shutdown in NodeJS aufgeführt sind.

0
Pankaj Shinde

Überprüfen Sie einfach Ihre Einstellungen in Visual Studio Code. Da ich meine Node-App ausgeführt habe und meinen Laptop in den Ruhezustand versetze, schalte ich meinen Laptop am nächsten Morgen wieder ein, um Software zu entwickeln. Dann führe ich den Befehl nodemon app.js erneut aus. Der erste Befehl wurde abends ausgeführt und der zweite führte meinen letzten Befehl aus, sodass zwei Eingabeaufforderungen dieselben Ports abhören. Aus diesem Grund tritt dieses Problem auf. Einfach Schließen Sie ein Terminal oder alle Terminals und führen Sie dann den Knoten app.js oder nodemon app.js aus

0
zaib