380 Stimmen

Node.js EACCES-Fehler beim Lauschen auf den meisten Ports

Ich teste eine App (die hoffentlich auf Heroku laufen soll, aber ich habe auch lokal Probleme). Es gibt mir einen EACCES-Fehler, wenn es http.Server.listen() läuft - aber es tritt nur auf einigen Ports.

Ich bin also auf der Flucht:

joe@joebuntu:~$ node
> var h = require('http').createServer();
> h.listen(900);
Error: EACCES, Permission denied
    at Server._doListen (net.js:1062:5)
    at net.js:1033:14
    at Object.lookup (dns.js:132:45)
    at Server.listen (net.js:1027:20)
    at [object Context]:1:3
    at Interface.<anonymous> (repl.js:150:22)
    at Interface.emit (events.js:42:17)
    at Interface._onLine (readline.js:132:10)
    at Interface._line (readline.js:387:8)
    at Interface._ttyWrite (readline.js:564:14)

Auf Port 900 (oder einem der anderen 20 Ports, die ich ausprobiert habe) läuft nichts, also sollte das funktionieren. Das Seltsame daran ist, dass es tut an einigen Häfen arbeiten. Zum Beispiel funktioniert Port 3000 perfekt.

Was könnte die Ursache dafür sein?

Aktualisierung 1:

Ich habe herausgefunden, dass auf meinem lokalen Computer der EACCES-Fehler auftritt, weil ich node als Root ausführen muss, um mich an diese bestimmten Ports zu binden. Ich weiß nicht, warum das passiert, aber die Verwendung von sudo behebt das Problem. Dies erklärt jedoch nicht, wie ich das Problem auf Heroku beheben würde. Es gibt keine Möglichkeit, Node als Root auf Heroku auszuführen, wie kann ich also auf Port 80 lauschen?

4voto

Mark Karwowski Punkte 609

Das bedeutet, dass der Knoten nicht in der Lage ist, auf dem definierten Port zu lauschen. Ändern Sie ihn auf etwas wie 1234 oder 2000 oder 3000 und starten Sie Ihren Server neu.

4voto

Krebto Punkte 171

Neustart war nicht genug! Die einzige Möglichkeit, das Problem zu lösen, ist die folgende:

Sie müssen den Dienst, der an diesem Port läuft, beenden.

bei cmd als Administrator ausführen, dann : netstat -aon | find /i "listening"

Dann erhalten Sie eine Liste mit den aktiven Diensten. Suchen Sie nach dem Port, der unter 4200n läuft, und verwenden Sie die Prozess-ID in der letzten Spalte, um ihn zu beenden

taskkill /F /PID 2652

2voto

ZILONG PAN Punkte 5147

Ich habe diesen Fehler auch auf meinem Mac. Ich benutze npm run dev um meine Nodejs-App unter Windows auszuführen, und es funktioniert einwandfrei. Aber ich habe diesen Fehler auf meinem Mac - error given was: Error: bind EACCES null:80 .

Eine Möglichkeit, dieses Problem zu lösen, besteht darin, es mit Root-Zugriff auszuführen. Sie können verwenden sudo npm run dev und müssen Sie Ihr Passwort eingeben.

Im Allgemeinen ist es vorzuziehen, Ihre Anwendung auf einem nicht privilegierten Port, wie z. B. 3000, bereitzustellen, der ohne Root-Berechtigungen funktioniert.

Hinweis: Node.js EACCES-Fehler beim Abhören des Ports http 80 (Erlaubnis verweigert)

2voto

Sean Punkte 11

Denken Sie daran, wenn Sie sudo verwenden, um sich an Port 80 zu binden und die Umgebungsvariablen PORT & NODE_ENV verwenden, müssen Sie diese Variablen erneut exportieren, da Sie jetzt unter dem Root-Profil und nicht unter Ihrem Benutzerprofil sind. Um dies auf meinem Mac zum Laufen zu bringen, habe ich folgendes getan:

sudo su
export NODE_ENV=production
export PORT=80
docpad run

2voto

mabounassif Punkte 2241

Ich bekam diesen Fehler auf meinem Mac, weil er den Apache-Server standardmäßig über denselben Port laufen ließ, der vom Node-Server verwendet wird, was in meinem Fall der Port 80 war. Alles, was ich tun musste, war, ihn zu stoppen mit sudo apachectl stop

Ich hoffe, das hilft jemandem.

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