Sie sehen häufig ein Beispiel für einen Hallo-Weltcode für Node, der einen HTTP-Server erstellt, einen Port abhört und anschließend Folgendes folgt:
console.log('Server is listening on port 8000');
Aber im Idealfall möchten Sie stattdessen Folgendes:
console.log('Server is listening on port ' + server.port);
Wie rufe ich den Port ab, den der Server gerade abhört, ohne die Nummer vor dem Aufruf in einer Variablen zu speichern? server.listen()
?
Ich habe dies schon einmal gesehen, kann es aber nicht in der Knotendokumentation finden. Vielleicht ist es etwas Spezielles auszudrücken?
javascript
node.js
express
port
David Tang
quelle
quelle
req.headers.host
Antworten:
Express 4.x Antwort:
Express 4.x (gemäß der Antwort von Tien Do unten) behandelt app.listen () jetzt als asynchrone Operation, sodass listener.address () nur Daten innerhalb des Rückrufs von app.listen () zurückgibt:
Express 3 Antwort:
Ich denke, Sie suchen dies (ausdrücklich spezifisch?):
Möglicherweise haben Sie dies gesehen (unter dem Strich), wenn Sie eine Verzeichnisstruktur aus dem
express
Befehl erstellen :quelle
var listener
Siethis.address().port
innerhalb desapp.listen()
Rückrufs verwendenthis.address.port()
aber Sie können es nicht innerhalb einer Pfeilfunktion verwenden . Sie müssen Old School machenapp.listen(8000, function () { console.log('http://localhost:' + this.address().port); }
(ja, ich weiß, Backticks sind schöner, aber ich kann sie nicht in Stack-Überlauf-Kommentaren machen)In Express v3.0,
funktioniert nicht mehr! Für Express v3.0 sollten Sie eine App und einen Server folgendermaßen erstellen:
Ich bin selbst auf dieses Problem gestoßen und wollte die neue Syntax dokumentieren. Diese und andere Änderungen in Express v3.0 sind unter https://github.com/visionmedia/express/wiki/Migrating-from-2.x-to-3.x sichtbar
quelle
0
an übergebenserver.listen()
. In diesem Fall wird eine zufällige Portnummer zugewiesen. Sie können dies tun, wenn Sie mehrere Express-Apps auf einem Server ausführen und die Portnummern nicht manuell zuweisen möchten.app.listen()
Gibt auch die http-Serverinstanz zurück.In der aktuellen Version (v0.5.0-pre) scheint der Port als Eigenschaft für das Serverobjekt verfügbar zu sein, siehe http://nodejs.org/docs/v0.4.7/api/net.html#server.address
Ausgänge
quelle
Falls Sie zum Zeitpunkt der Anforderungsbearbeitung einen Port benötigen und die App nicht verfügbar ist, können Sie Folgendes verwenden:
quelle
Wenn Sie Express verwenden, können Sie es vom Anforderungsobjekt abrufen:
quelle
Ich benutze diesen Weg Express 4:
Auf diese Weise muss ich keine separate Variable für den Listener / Server verwenden.
quelle
this
wird undefiniert sein.Das Erfordernis des http-Moduls war nie erforderlich.
Ein zusätzlicher Import von
http
ist in Express 3 oder 4 nicht erforderlich. Das Zuweisen des Ergebnisses vonlisten()
ist ausreichend.Dies wird wiederum in Express 3.5.1 und 4.0.0 getestet. Der Import
http
war nie notwendig. Die Listen-Methode gibt ein http-Server-Objekt zurück. https://github.com/visionmedia/express/blob/master/lib/application.js#L531quelle
Mit der neuesten Datei node.js (v0.3.8-pre): Ich habe die Dokumentation überprüft, die von http.createServer () zurückgegebene Serverinstanz überprüft und den Quellcode von server.listen () gelesen ...
Leider wird der Port nur vorübergehend als lokale Variable gespeichert und endet als Argument in einem Aufruf von process.binding ('net'). Bind (), einer nativen Methode. Ich habe nicht weiter gesucht.
Es scheint keinen besseren Weg zu geben, als einen Verweis auf den Portwert zu behalten, den Sie server.listen () zur Verfügung gestellt haben.
quelle
Der einfachste Weg, vom alten Stil in den neuen (Express 3.x) Stil zu konvertieren, ist folgender:
Vor 3.x funktioniert es so:
quelle
quelle
Ich habe mir auch diese Frage gestellt, dann bin ich zur Express 4.x-Leitfadenseite gekommen , um dieses Beispiel zu sehen:
quelle
Sie können die Portnummer erhalten, indem Sie den
server.address().port
folgenden Code verwenden:quelle
quelle
Wenn Sie die Portnummer nicht definiert haben und wissen möchten, auf welchem Port sie ausgeführt wird.
Zu Ihrer Information, jedes Mal, wenn es in einem anderen Port ausgeführt wird.
quelle
Die
findandbind
npm adressiert dies für Express / Restify / Connect: https://github.com/gyllstromk/node-find-and-bindquelle
unten ein einfacher http-Server und wie man den Listening-Port bekommt
Holen Sie sich dann den Server-Port mit:
quelle
quelle
Der einfachere Weg ist, einfach anzurufen
app.get('url')
, wodurch Sie das Protokoll, die Subdomäne, die Domäne und den Port erhalten.quelle