Ich habe eine Node.js / Express.js-App auf meinem Server, die nur auf Port 3000 funktioniert, und ich versuche herauszufinden, warum. Folgendes habe ich gefunden:
- Ohne Angabe eines Ports (
app.listen()
) wird die App ausgeführt, die Webseite wird jedoch nicht geladen. - Auf Port 3001 (
app.listen(3001)
) oder einem anderen Port, der nicht verwendet wird, wird die App ausgeführt, aber die Webseite wird nicht geladen. - Auf Port 2999 gibt die App einen Fehler aus, da dieser Port von einem anderen Benutzer verwendet wird.
- Auf Port 3000 wird die App ausgeführt und die Webseite wird einwandfrei geladen.
Ich weiß, dass Express-Apps standardmäßig Port 3000 verwenden. Seltsamerweise wird meine App nur ausgeführt, wenn ich sie explizit auf Port 3000 ( app.listen(3000)
) ausführen lasse .
Ich fand dies in Zeile 220 von /usr/bin/express
:
app.set(\'port\', process.env.PORT || 3000);
Dies geschieht wie zuvor angegeben: Setzen Sie den Port auf den angegebenen Wert oder auf 3000, wenn nichts angegeben ist.
Wie kann ich meine App an einem anderen Port wie 8080 oder 3001 zum Laufen bringen?
Vielen Dank!
Bearbeiten: Codebeispiel (Sehr einfache Node / Express App)
var express = require("express");
var app = express();
app.get('/', function(req, res){
res.send('hello world');
});
// Only works on 3000 regardless of what I set environment port to or how I set [value] in app.set('port', [value]).
app.listen(3000);
javascript
node.js
configuration
express
port
Benjamin Martin
quelle
quelle
port
wird von benötigt.listen()
, daher sollten Sie nicht versuchen, darauf zu verzichten. 2) Erhalten Sie Fehler beim Ausführen der Anwendung? Oder scheint es nur über einen Browser unzugänglich zu sein? 3) Sind Sie versuchen, die Website auf der gleichen Maschine zuzugreifen mitlocalhost:3000
,localhost:3001
usw.? Wenn Sie zwei Computer verwenden, einen Client und einen Server, müssen Sie der Firewall auf dem Server Ausnahmen hinzufügen, damit Node Anforderungen vom Client empfangen kann..listen()
. Wenn ich oben "Die App wird ausgeführt" sage, ist dies dasselbe wie Sie sagen: "Keine Fehler beim Ausführen der Anwendung". Wenn ich sage, "Webseite wird nicht geladen", ist dies dasselbe wie Sie sagen, "über einen Browser nicht zugänglich". Alle greifen von demselben Computer (meinem Server) zu. Danke für die Rückmeldung.$ supervisor app.js
oder$ PORT=[PORT] node app.js
wenn ich die Umgebungsportvariable festlegen möchte. Ich werde ein Codebeispiel erstellen.Antworten:
Folgendes funktioniert, wenn Sie so etwas in Ihrer app.js haben:
Entweder codieren Sie Ihren Code explizit fest, um den gewünschten Port zu verwenden, wie z.
Dieser Code bedeutet, dass Sie Ihren Port auf die Umgebungsvariable setzen
PORT
oder, falls dies der Fall istundefined
, auf das Literal3000
.Oder verwenden Sie Ihre Umgebung, um den Port festzulegen. Das Festlegen über die Umgebung wird verwendet, um die Abgrenzung zwischen
PRODUCTION
undDEVELOPMENT
und vielen Plattformen als Dienst zu erleichtern. Verwenden Sie die Umgebung, um den Port gemäß ihren Spezifikationen sowie internen Express-Konfigurationen festzulegen. Im Folgenden wird ein Umgebungsschlüssel-Wert-Paar festgelegt und anschließend Ihre App gestartet.In Bezug auf Ihr Codebeispiel möchten Sie ungefähr Folgendes:
quelle
app.set()
Code in meine App ein und ändern Sie 3000 in 8080. Funktioniert immer noch nurapp.listen(3000)
. 2. Ändern Sie die Umgebungsportvariable in 8080, wenn Sie die Knoten-App ausführen. Funktioniert immer noch nur weiterapp.listen(3000)
. 3. Gehen Sie zu / usr / bin / express (Zeile 220) und ändern Sie 3000 zu 8080. Funktioniert immer noch nurapp.listen(3000)
. Vielen Dank für den informativen Beitrag. Muss ich etwas neu starten? Express kann nicht von dem neu gestartet werden, was ich sagen kann, und der Neustart der Node-App erfolgt jedes Mal, wenn ich sie benutzenode app.js.
node app.js
gestartet (ich persönlich verwende esnodemon
beim Entwickeln und Testen. Was Sie vielleicht denken, ist dieexpress
ausführbare Befehlszeile, die ein Hilfsprozess ist, der Ihr Skelett aufbaut Dateistruktur. Können Sie einen Kern Ihres Codesnodemon
in Verbindung mitnohup
, um meine App unbegrenzt laufen zu lassen. Ich verwende nicht die ausführbare CL-Version von,express
daher muss sie jedes Mal neu gestartet werden, wenn ich meinenode
App neu starte. Siehe meinen ursprünglichen Beitrag für eine Bearbeitung mit Code. Vielen Dank!In
bin/www
gibt es eine Zeile:Versuchen Sie es zu ändern.
quelle
Versuche dies
quelle
Versuchen Sie, den Speicherort bin> www zu finden und die Portnummer zu ändern ...
quelle
Die Standardmethode zum Ändern des Überwachungsports im Express-Framework besteht darin, die Datei mit dem Namen www im Ordner bin zu ändern.
Dort finden Sie eine Zeile wie die folgende
Ändern Sie den Wert 3000 in einen beliebigen Port.
Dies gilt für Express Version 4.13.1
quelle
Nur ein Hinweis für Mac OS X- und Linux-Benutzer:
Wenn Sie Ihre Node / Express-App auf einer Portnummer unter 1024 ausführen möchten, müssen Sie als Superuser ausgeführt werden:
sudo PORT=80 node app.js
quelle
In der neuesten Version des Codes mit Express-Generator (4.13.1) ist app.js ein exportiertes Modul und der Server wird in / bin / www mit app.set ('port', process.env.PORT || 3001) gestartet. in app.js wird durch eine ähnliche Anweisung in bin / www überschrieben. Ich habe gerade die Anweisung in bin / www geändert.
quelle
Es wurde festgestellt, dass dies nie behoben wurde ... Sie haben wahrscheinlich eine Firewall vor Ihrem Computer, die diese Ports blockiert, oder iptables ist eingerichtet, um die Verwendung dieser Ports zu verhindern.
Versuchen Sie, nmap -F localhost auszuführen, wenn Sie Ihre App ausführen (installieren Sie nmap, wenn Sie es nicht haben). Wenn sich herausstellt, dass Sie die App auf dem richtigen Port ausführen und nicht über einen Remote-Browser darauf zugreifen können, gibt es eine Middleware oder eine physische Firewall, die den Port blockiert.
Hoffe das hilft!
quelle
Die gefundene Zeile sucht nur nach der Umgebungsvariablen
PORT
. Wenn sie definiert ist, wird sie verwendet, andernfalls wird der Standardport verwendet3000
. Sie müssen diese Umgebungsvariable zuerst definieren (Sie müssen nicht root sein).quelle
Wenn Sie etwas zeigen möchten, sind Sie mit 3000 verbunden
Ich hoffe das wird dir hilfreich sein
quelle
Antwort gemäß aktueller Version von Express
Wenn Sie über die aktuelle Version von Express sprechen und laufen
app.listen()
, um das Abhören ohne Angabe des Ports zu starten, wählt Express einen zufälligen Port für Ihre Anwendung aus, um herauszufinden, welcher Port derzeit verwendet wirdsollte den Port Ihres ausgeben . Darüber hinaus kann dieser erste Parameter vollständig ignoriert werden, wird jedoch nicht empfohlen
app
0
quelle
Stellen Sie sicher, dass Sie in dem Ordner Ihrer Anwendung ausgeführt werden, in dem Sie die Datei package.json haben.
quelle
Ich verwende das
minimist
Paket und die Knotenstartargumente, um den Port zu steuern.node server.js --port 4000
oder
node server.js -p 4000
In server.js kann der Port durch bestimmt werden
Der Standardwert ist 3000, wenn kein Port als Argument übergeben wird.
Sie können dann die
port
Variable abhören .quelle
Fügen Sie in app.js einfach ...
Dadurch wird die PORT-Variable für die Express-Anwendung isoliert.
quelle
Ich denke, der beste Weg ist, das dotenv- Paket zu verwenden und den Port für die
.env
Konfigurationsdatei festzulegen , ohne die Dateiwww
im Ordner zu ändernbin
.Installieren Sie einfach das Paket mit dem Befehl:
benötigen Sie es in Ihrer Bewerbung:
Erstellen Sie eine .env-Datei im Stammverzeichnis Ihres Projekts und fügen Sie den Port hinzu (zum Beispiel), um Port 5000 abzuhören
und das ist es.
Mehr Infos hier
quelle
Wenn Sie Nodemon verwenden, ist der PORT 3000 vermutlich in der nodemonConfig festgelegt. Überprüfen Sie, ob dies der Fall ist.
quelle