Sie sehen oft Beispiel-Hello-World-Code für Node, der einen Http-Server erstellt, beginnt, einen Port zu überwachen, gefolgt von etwas in der Art von:
console.log('Server is listening on port 8000');
Aber idealerweise 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 Anruf in einer Variablen zu speichern? server.listen()?
Ich habe das schon einmal gesehen, aber ich kann es nicht in der Node-Dokumentation finden. Vielleicht ist es etwas bestimmtes auszudrücken?
Zu finden in req.headers.host
– Andreas_1510
9. Januar 2016 um 13:14 Uhr
Alfred
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 Callbacks von app.listen() zurückgibt:
var app = require('express')();
var listener = app.listen(8888, function(){
console.log('Listening on port ' + listener.address().port); //Listening on port 8888
});
Express 3-Antwort:
Ich denke, Sie suchen das (ausdrücklich spezifisch?):
console.log("Express server listening on port %d", app.address().port)
Möglicherweise haben Sie dies (unterm Strich) gesehen, als Sie eine Verzeichnisstruktur erstellt haben express Befehl:
Danke, ich glaube das ist genau das was ich suche. Ich werde es akzeptieren, sobald ich die Möglichkeit habe, es zu testen. Prost.
– David Tang
30. Januar 2011 um 20:54 Uhr
Und wenn Sie diese Variable nicht haben möchten var listener Sie können verwenden this.address().port Innerhalb app.listen() zurückrufen
– Andrej Stalbe
23. Januar 2016 um 9:19 Uhr
Wie sieht das in Express 5.x aus?
– Diogenes
9. Juli 2017 um 18:20 Uhr
Sie können den Port auch überall in einer Middleware abrufen: req.socket.address().port
– jlguenego
30. April 2018 um 11:33 Uhr
Nur um das zu ergänzen, was @AndreiStalbe gesagt hat, können Sie verwenden this.address.port() aber Sie können das nicht innerhalb einer Pfeilfunktion verwenden. Sie müssen die alte Schule machen app.listen(8000, function () { console.log('http://localhost:' + this.address().port); } (Ja, ich weiß, Backticks sind schöner, aber ich kann sie nicht in Stapelüberlaufkommentaren verwenden.)
– WORMSS
26. April 2019 um 9:19 Uhr
In Express v3.0,
/* No longer valid */
var app = express.createServer();
app.listen();
console.log('Server running on %s', app.address().port);
funktioniert nicht mehr! Für Express v3.0 sollten Sie auf diese Weise eine App und einen Server erstellen:
var express = require('express');
var http = require('http');
var app = express();
var server = http.createServer(app);
app.get("https://stackoverflow.com/", function(req, res) {
res.send("Hello World!");
});
server.listen(3000);
console.log('Express server started on port %s', server.address().port);
Oder Sie könnten einfach die alte Methode zum Erstellen des Servers verwenden, die immer noch funktioniert. Es scheint einfach keine Möglichkeit mehr zu geben, nachträglich auf den Port zuzugreifen. Da Sie den Port jedoch selbst im Aufruf von server.listen angeben, besteht wirklich keine Notwendigkeit, server.address().port zu verwenden, da Sie einfach denselben Wert verwenden können, den Sie an server.listen übergeben haben.
– Mary Hamlin
31. Juli 2012 um 16:49 Uhr
(Obwohl ich gerade den Migrationsleitfaden gelesen und gesehen habe, dass die Methode zum Erstellen einer App und eines Servers, die Sie oben erwähnt haben, tatsächlich die neue bevorzugte Methode ist.)
– Mary Hamlin
31. Juli 2012 um 20:43 Uhr
@MaryHamlin: Dies ist nützlich, wenn Sie vorbeikommen 0 zu server.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 Portnummern nicht manuell zuweisen möchten.
– Nate
31. August 2012 um 7:28 Uhr
app.listen() gibt auch die HTTP-Serverinstanz zurück.
– Pfarrhaus
5. Januar 2014 um 9:51 Uhr
Falls Sie zum Zeitpunkt der Anfragebearbeitung einen Port benötigen und die App nicht verfügbar ist, können Sie dies verwenden:
var server = http.createServer(function(req, res) {
...
}
server.listen(8088);
console.log(server.address());
console.log(server.address().address);
console.log(server.address().port);
Ausgänge
{ address: '0.0.0.0', port: 8088 }
0.0.0.0
8088
Ich verwende auf diese Weise Express 4:
app.listen(1337, function(){
console.log('Express listening on port', this.address().port);
});
Dadurch muss ich keine separate Variable für den Listener/Server verwenden.
Beste Antwort bisher! Wenn Sie ES6 verwenden, verwenden Sie keine Pfeilfunktionen. this wird undefiniert sein.
– Laxmana
21. Juli 2017 um 10:19 Uhr
Dies funktioniert von innen an async Funktion während listener.address().port Ansatz nicht.
– Ciro Santilli Путлер Капут 六四事
24. Dezember 2021 um 9:07 Uhr
Chovy
Wenn Sie Express verwenden, können Sie es aus dem Anfrageobjekt abrufen:
req.app.settings.port // => 8080 or whatever your app is listening at.
Beste Antwort bisher! Wenn Sie ES6 verwenden, verwenden Sie keine Pfeilfunktionen. this wird undefiniert sein.
– Laxmana
21. Juli 2017 um 10:19 Uhr
Dies funktioniert von innen an async Funktion während listener.address().port Ansatz nicht.
– Ciro Santilli Путлер Капут 六四事
24. Dezember 2021 um 9:07 Uhr
Das Erfordernis des http-Moduls war nie notwendig.
Ein zusätzlicher Import von http ist in Express 3 oder 4 nicht erforderlich. Zuweisen des Ergebnisses von listen() reicht.
var server = require('express')();
server.get("https://stackoverflow.com/", function(req, res) {
res.send("Hello Foo!");
});
var listener = server.listen(3000);
console.log('Your friendly Express server, listening on port %s', listener.address().port);
// Your friendly Express server, listening on port 3000
Zu finden in
req.headers.host
– Andreas_1510
9. Januar 2016 um 13:14 Uhr