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?

1voto

khizar ijaz Punkte 11

Fehler: listen EACCES: Erlaubnis verweigert 3000; ich füge "PORT = 3000;" hinzu, während "PORT = 3000" . nur Semikolon";" gibt Fehler

Semikolon entfernen und Projekt erfolgreich ausführen

1voto

Der mögliche Grund dafür ist also ein Tippfehler in den Namen der Umgebungsvariablen oder ein nicht installiertes dotenv-Paket.

Also, wenn es irgendeinen anderen Fehler außer Tippfehler und dotenv npm-Paket, dann müssen Sie versuchen, diese Lösungen, die unten angegeben sind:

Erste Lösung nur für Windows

Öffnen Sie cmd als "Als Administrator ausführen" und schreiben Sie dann zwei Befehle

  1. net stop winnat
  2. net start winnat

Ich hoffe, damit ist das Problem gelöst ...

Zweite Lösung nur für Windows

Achten Sie darauf, dass in Ihrer Umgebungsvariablen kein Semikolon(;) am Ende der Variablen und kein Doppelpunkt (:) nach dem Variablennamen steht.

Ich habe zum Beispiel an einem Projekt gearbeitet, bei dem meine Umgebungsvariablen nicht funktionierten, so dass die Struktur meiner .env-Datei wie folgt war PORT:5000; CONNECTION_URL:MongoDbString.<password>/<dbname>; Es gab also diese Fehlermeldung

Error: listen EACCES: permission denied 5000;
at Server.setupListenHandle [as _listen2] (node:net:1313:21)
at listenInCluster (node:net:1378:12)
at Server.listen (node:net:1476:5)
at Function.listen (E:\MERN REACT\mern_memories\server\node_modules\express\lib\application.js:618:24)
at file:///E:/MERN%20REACT/mern_memories/server/index.js:29:9
at processTicksAndRejections (node:internal/process/task_queues:96:5)

Das Ereignis 'Fehler' wurde auf der Serverinstanz ausgelöst bei: bei emitErrorNT (node:net:1357:8) bei processTicksAndRejections (node:internal/process/task_queues:83:21) { Code: 'EACCES', errno: -4092, syscall: 'listen', Adresse: '5000;', port: -1 } [nodemon] app abgestürzt - wartet auf Datei-Änderungen vor dem Start...

Also habe ich einige Änderungen in meiner env-Datei vorgenommen, diesmal habe ich den Doppelpunkt(:) entfernt und durch equal(=) ersetzt und den Doppelpunkt am Ende entfernt, so dass meine .env-Datei wie folgt aussah

PORT = 5000
CONNECTION_URL = MongoDbString.<password>/<dbname>

Nachdem ich diese Dinge geändert hatte, lief mein Server auf dem Port 5000 ohne jegliche Warnung oder Probleme

Ich hoffe, das klappt...

code #entwickler #mernstack #nodejs #react #Windows #hostservicenetwork #http #permission-denied #EACCES:-4092

1voto

Hosayn Sayed Punkte 21

Das bedeutet, dass der Port bereits anderweitig verwendet wird. Sie müssen also einen anderen Port ausprobieren oder die Verwendung des alten Ports einstellen.

1voto

mrjamiebowman Punkte 105

Bei mir betraf dieses Problem alle Hosts und alle Ports unter Windows in PowerShell.

Durch Deaktivieren der Netzwerkschnittstellen wurde das Problem behoben.

Ich hatte eine WiFi- und eine Ethernet-Verbindung und die Deaktivierung der Ethernet-Schnittstelle hat das Problem behoben.

Öffnen Sie "Netzwerkverbindungen", um Ihre Schnittstellen anzuzeigen. Klicken Sie mit der rechten Maustaste und wählen Sie "Deaktivieren".

1voto

Alok Ranjan Punkte 819

Mein Fehler wurde nur durch die Änderung der Portnummer in server.js behoben Speziell in dieser Zeile

const port = process.env.PORT || 8085;

Ich habe meine Portnummer von 8080 auf 8085 geändert.

Ich hoffe, es hilft.

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