539 Stimmen

Wie behebt man den Fehler: listen EADDRINUSE bei der Verwendung von NodeJS?

Wenn ich einen Server mit dem Port 80 betreibe und versuche, die XMLHttpRequest Ich erhalte diesen Fehler: Error: listen EADDRINUSE

Warum ist es ein Problem für NodeJS, wenn ich eine Anfrage stellen möchte, während ich einen Server auf dem Port 80 laufen lasse? Für die Webbrowser ist es kein Problem: Ich kann im Internet surfen, während der Server läuft.

Der Server ist:

  net.createServer(function (socket) {
    socket.name = socket.remoteAddress + ":" + socket.remotePort;
    console.log('connection request from: ' + socket.remoteAddress);
    socket.destroy();
  }).listen(options.port);

Und die Anfrage:

var xhr = new XMLHttpRequest();

xhr.onreadystatechange = function() {
    sys.puts("State: " + this.readyState);

    if (this.readyState == 4) {
        sys.puts("Complete.\nBody length: " + this.responseText.length);
        sys.puts("Body:\n" + this.responseText);
    }
};

xhr.open("GET", "http://mywebsite.com");
xhr.send();

32voto

Javier Cobos Punkte 1092

Unter einer Controller-Env könnten Sie verwenden:

pkill node bevor Sie Ihr Skript ausführen, sollte diese Aufgabe erledigt sein.

Beachten Sie, dass dieser Befehl alle node Prozesse, was richtig sein könnte, wenn Sie z.B. einen Container haben, in dem nur eine Instanz läuft, oder wenn Sie eine solche Umgebung haben, in der Sie das garantieren können.

In jedem anderen Szenario empfehle ich, einen Befehl zu verwenden, um eine bestimmte Prozess-ID oder einen bestimmten Prozessnamen zu beenden, den Sie durch programmatisches Suchen gefunden haben. Wenn Ihr Prozess z. B. node-server-1 heißt, könnten Sie Folgendes tun pkill node-server-1 .

Diese Ressource könnte für das Verständnis nützlich sein: https://www.thegeekstuff.com/2009/12/4-ways-to-kill-a-process-kill-killall-pkill-xkill/

20voto

Pramod Jain Punkte 434
lsof -i:3000;
kill -9 $(lsof -t -i:3000);
// 3000 is a your port
// This "lsof -i:3000;" command will show PID 
kill PID 
ex: kill 129393

18voto

Evan Carroll Punkte 1

Ein weiterer Grund für diesen Fehler sind zwei HTTP-Server im gleichen Knotencode. Ich war einige Express 2 zu Express 3 Code aktualisieren, und hatte diese...

http.createServer(app).listen(app.get('port'), function(){            
  console.log('Express server listening on port ' + app.get('port')); 
});        

// tons of shit.

http.createServer(app).listen(app.get('port'), function(){            
  console.log('Express server listening on port ' + app.get('port')); 
});                                                                   

Und das hat diesen Fehler ausgelöst.

5voto

WAQAR SHAIKH Punkte 141

Dieser Fehler tritt auf, wenn ein beliebiger Prozess auf einem Port läuft, auf dem Sie Ihre Anwendung ausführen möchten.

wie man herausfindet, welcher Prozess auf diesem Port läuft=> Befehl: sudo netstat -ap | grep :3000

output : Sie erhalten die Informationen über den Prozess, der diesen Port benutzt

tcp 0 0 IPAdresse:3000 : LISTEN 26869/Knoten

Jetzt können Sie diesen Prozess beenden sudo kill -9 26869

3voto

ControlAltDel Punkte 32085

Ich habe diesen Fehler vor (in Knoten) mit http.client gesehen, und wie ich mich erinnere, hatte das Problem mit nicht Initialisierung der httpClient oder falsche Optionen in der httpClient Erstellung und/oder in der URL-Anforderung zu tun.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X