Często widzisz przykładowy kod hello world dla Node, który tworzy serwer HTTP, zaczyna nasłuchiwać na porcie, a następnie następuje coś w rodzaju:
console.log('Server is listening on port 8000');
Ale najlepiej byłoby to zamiast tego:
console.log('Server is listening on port ' + server.port);
Jak mogę pobrać port, na którym aktualnie nasłuchuje serwer, bez zapisywania numeru w zmiennej przed wywołaniem server.listen()
?
Widziałem to już wcześniej, ale nie mogę znaleźć tego w dokumentacji Node. Może jest to coś konkretnego do wyrażenia?
javascript
node.js
express
port
David Tang
źródło
źródło
req.headers.host
Odpowiedzi:
Odpowiedź Express 4.x:
Express 4.x (zgodnie z odpowiedzią Tien Do poniżej), teraz traktuje app.listen () jako operację asynchroniczną, więc listener.address () zwróci dane tylko wewnątrz wywołania zwrotnego app.listen ():
Odpowiedź Express 3:
Myślę, że szukasz tego (wyrazić konkretnie?):
Mogłeś to zobaczyć (podsumowanie), kiedy tworzysz strukturę katalogów za pomocą
express
polecenia:źródło
var listener
, możesz użyćthis.address().port
wewnętrznegoapp.listen()
wywołania zwrotnegothis.address.port()
ale nie możesz tego użyć wewnątrz funkcji strzałki. będziesz musiał zrobić starą szkołęapp.listen(8000, function () { console.log('http://localhost:' + this.address().port); }
(tak, wiem, że grawerowanie jest ładniejsze, ale nie mogę ich zrobić w komentarzach przepełnienia stosu)W express v3.0,
nie działa! W przypadku Express v3.0 aplikację i serwer należy utworzyć w ten sposób:
Sam napotkałem ten problem i chciałem udokumentować nową składnię. Ta i inne zmiany w Express v3.0 są widoczne pod adresem https://github.com/visionmedia/express/wiki/Migrating-from-2.x-to-3.x
źródło
0
doserver.listen()
, w którym to przypadku przypisywany jest losowy numer portu. Możesz to zrobić, jeśli używasz kilku aplikacji Express na jednym serwerze i nie chcesz ręcznie przypisywać numerów portów.app.listen()
zwraca również instancję serwera http.W aktualnej wersji (v0.5.0-pre) port wydaje się być dostępny jako właściwość obiektu serwera, patrz http://nodejs.org/docs/v0.4.7/api/net.html#server.address
wyjścia
źródło
W przypadku, gdy potrzebujesz portu w momencie obsługi żądania, a aplikacja nie jest dostępna, możesz użyć tego:
źródło
Jeśli korzystasz z ekspresu, możesz go pobrać z obiektu żądania:
źródło
Używam Express 4 w ten sposób:
Używając tego, nie muszę używać oddzielnej zmiennej dla nasłuchiwania / serwera.
źródło
this
będzie niezdefiniowana.Żądanie modułu http nigdy nie było konieczne.
Dodatkowy import
http
nie jest konieczny w Express 3 lub 4.listen()
Wystarczy przypisać wynik .Ponownie jest to testowane w Express 3.5.1 i 4.0.0. Importowanie
http
nigdy nie było konieczne. Metoda Listen zwraca obiekt serwera http. https://github.com/visionmedia/express/blob/master/lib/application.js#L531źródło
Z najnowszym node.js (v0.3.8-pre): sprawdziłem dokumentację, przejrzałem instancję serwera zwróconą przez http.createServer () i przeczytałem kod źródłowy server.listen () ...
Niestety, port jest przechowywany tylko tymczasowo jako zmienna lokalna i kończy jako argument w wywołaniu process.binding („net”). Bind (), która jest metodą natywną. Nie szukałem dalej.
Wygląda na to, że nie ma lepszego sposobu niż zachowanie odniesienia do wartości portu, którą podałeś do server.listen ().
źródło
Najprostszy sposób konwersji ze starego do nowego stylu (Express 3.x) wygląda następująco:
Pre 3.x działa tak:
źródło
źródło
Zadawałem sobie również to pytanie, a potem przeszedłem na stronę przewodnika po Express 4.x, aby zobaczyć ten przykład:
źródło
Możesz uzyskać numer portu, korzystając
server.address().port
z poniższego kodu:źródło
źródło
Jeśli nie zdefiniowałeś numeru portu i chcesz wiedzieć, na którym porcie jest on uruchomiony.
FYI, za każdym razem będzie działać w innym porcie.
źródło
Te
findandbind
adresy KMP to do wyraźnej / restify / connect: https://github.com/gyllstromk/node-find-and-bindźródło
poniżej prosty serwer http i jak uzyskać port nasłuchiwania
następnie uzyskaj port serwera za pomocą:
źródło
źródło
Najłatwiejszym sposobem jest po prostu zadzwonić
app.get('url')
, podając protokół, subdomenę, domenę i port.źródło