Mam aplikację Node.js / Express.js uruchomioną na moim serwerze, która działa tylko na porcie 3000 i próbuję dowiedzieć się, dlaczego. Oto co znalazłem:
- Bez określenia portu (
app.listen()
) aplikacja działa, ale strona internetowa się nie ładuje. - Na porcie 3001 (
app.listen(3001)
) lub innym nieużywanym porcie aplikacja działa, ale strona internetowa nie jest ładowana. - Na porcie 2999 aplikacja zgłasza błąd, ponieważ coś innego używa tego portu.
- Na porcie 3000 aplikacja działa, a strona internetowa ładuje się poprawnie.
Wiem, że aplikacje Express domyślnie korzystają z portu 3000. Ale, co dziwne, moja aplikacja działa tylko wtedy, gdy wyraźnie ustawię ją na porcie 3000 ( app.listen(3000)
).
Znalazłem to w linii 220 z /usr/bin/express
:
app.set(\'port\', process.env.PORT || 3000);
Robi się tak, jak wcześniej wspomniano: ustawianie portu na określony lub na 3000, jeśli nic nie zostało określone.
Jak mogę sprawić, by moja aplikacja działała na innym porcie, takim jak 8080 lub 3001?
Dzięki!
Edycja: przykład kodu (bardzo prosta aplikacja Node / Express)
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
źródło
źródło
port
jest wymagane przez.listen()
, więc nie powinieneś próbować obejść się bez. 2) Czy podczas uruchamiania aplikacji pojawiają się jakieś błędy? A może po prostu wydaje się niedostępny z przeglądarki? 3) Czy próbujesz uzyskać dostęp do strony internetowej na tym samym komputerze zlocalhost:3000
,localhost:3001
itp? Jeśli używasz dwóch komputerów, jednego klienta i jednego serwera, musisz dodać wyjątki do zapory na serwerze, aby umożliwić Node odbieranie żądań od klienta..listen()
. Powyżej stwierdzenie „aplikacja działa” oznacza to samo, co powiedzenie „brak błędów podczas uruchamiania aplikacji”. Kiedy mówię „strona internetowa nie ładuje się”, to tak samo, jak mówisz „niedostępna z przeglądarki”. Cały dostęp z tego samego komputera (mojego serwera). Dziękujemy za opinię.$ supervisor app.js
lub$ PORT=[PORT] node app.js
gdy chcę ustawić zmienną portu środowiskowego. Podam przykład kodu.Odpowiedzi:
Poniższe działa, jeśli masz coś takiego w pliku app.js:
Albo jawnie zakoduj swój kod, aby używać żądanego portu, na przykład:
Ten kod oznacza ustawienie portu na zmienną środowiskową
PORT
lub, jeśli tak jest,undefined
ustawienie go na literał3000
.Lub użyj swojego środowiska, aby ustawić port. Ustawienie go za pośrednictwem środowiska pomaga w określeniu między,
PRODUCTION
aDEVELOPMENT
także wiele platform jako usług używa środowiska do ustawiania portu zgodnie ze swoimi specyfikacjami, a także wewnętrznymi konfiguracjami Express. Poniżej ustawia się parę klucz = wartość środowiska, a następnie uruchamia aplikację.W odniesieniu do twojego przykładu kodu, chcesz coś takiego:
źródło
app.set()
kod w mojej aplikacji i zmieniłem 3000 na 8080. Nadal działa tylko naapp.listen(3000)
. 2. Zmień zmienną portu środowiskowego na 8080 podczas uruchamiania aplikacji węzła. Nadal działa tylko dalejapp.listen(3000)
. 3. Przeszedł do / usr / bin / express (linia 220) i zmienił 3000 na 8080. Nadal działa tylko naapp.listen(3000)
. Dziękuję jednak za informacyjny post. Czy jest coś, co muszę ponownie uruchomić? Express nie może zostać ponownie uruchomiony z tego, co wiem, a ponowne uruchomienie aplikacji Node dzieje się za każdym razem, gdy używamnode app.js.
node app.js
go uruchomi (osobiście używamnodemon
podczas programowania i testowania. To, o czym możesz pomyśleć, toexpress
plik wykonywalny wiersza polecenia, który jest procesem pomocniczym, który buduje twój szkielet struktura pliku. Czy możesz opublikowaćnodemon
w połączeniu z,nohup
aby moja aplikacja działała przez czas nieokreślony. Nie używam wersji wykonywalnej CL programu,express
więc musi być uruchamiany ponownie za każdym razem, gdy ponownie uruchamiamnode
aplikację. Zobacz mój oryginalny post dotyczący zmiany z kodem. Dzięki!W
bin/www
jest wiersz:Spróbuj to zmodyfikować.
źródło
Spróbuj tego
źródło
Spróbuj zlokalizować lokalizację bin> www i spróbuj zmienić numer portu ...
źródło
Domyślnym sposobem zmiany portu nasłuchiwania w środowisku Express jest zmodyfikowanie pliku o nazwie www w folderze bin.
Znajdziesz tam linię taką jak poniższa
Zmień wartość 3000 na dowolny port.
Dotyczy to wersji Express 4.13.1
źródło
Tylko uwaga dla użytkowników Mac OS X i Linux:
Jeśli chcesz uruchomić aplikację Node / Express na porcie o numerze niższym niż 1024, musisz działać jako administrator:
sudo PORT=80 node app.js
źródło
W najnowszej wersji kodu z generatorem ekspresowym (4.13.1) app.js jest eksportowanym modułem, a serwer jest uruchamiany w / bin / www za pomocą app.set ('port', process.env.PORT || 3001) w app.js zostanie zastąpiona podobną instrukcją w bin / www. Właśnie zmieniłem oświadczenie w bin / www.
źródło
Zauważyłem, że to nigdy nie zostało rozwiązane ... Prawdopodobnie masz przed komputerem zaporę ogniową blokującą te porty lub skonfigurowano iptables, aby uniemożliwić korzystanie z tych portów.
Spróbuj uruchomić nmap -F localhost podczas uruchamiania aplikacji (zainstaluj nmap, jeśli go nie masz). Jeśli wydaje się, że uruchamiasz aplikację na odpowiednim porcie i nie możesz uzyskać do niej dostępu przez zdalną przeglądarkę, oznacza to, że istnieje oprogramowanie pośredniczące lub fizyczna zapora, która blokuje port.
Mam nadzieję że to pomoże!
źródło
Linia, którą znalazłeś, po prostu szuka zmiennej środowiskowej
PORT
, jeśli jest zdefiniowana, używa jej, w przeciwnym razie używa domyślnego portu3000
. Musisz najpierw zdefiniować tę zmienną środowiskową (nie musisz być rootem)źródło
Jeśli chcesz coś pokazać, jesteś połączony na 3000
Mam nadzieję, że okaże się to pomocne
źródło
Odpowiedz zgodnie z aktualną wersją express
Jeśli mówisz o aktualnej wersji Express , jeśli uruchomisz
app.listen()
nasłuchiwanie bez określania portu, Express wybierze losowy port dla twojej aplikacji, aby dowiedzieć się, który port jest aktualnie używanyShould wyjście portu twoich
app
. Ponadto ten pierwszy parametr0
można całkowicie zignorować, ale nie jest zalecanyźródło
Upewnij się, że korzystasz z tego folderu aplikacji, w którym znajduje się plik package.json.
źródło
minimist
Do sterowania portem używam pakietu i argumentów startowych węzła.node server.js --port 4000
lub
node server.js -p 4000
Wewnątrz server.js port można określić przez
i domyślnie 3000, jeśli żaden port nie zostanie przekazany jako argument.
Następnie możesz użyć nasłuchu na
port
zmiennej.źródło
W app.js, po prostu dodaj ...
Spowoduje to odizolowanie zmiennej PORT do aplikacji ekspresowej.
źródło
Myślę, że najlepszym sposobem jest użycie pakietu dotenv i ustawienie portu w
.env
pliku konfiguracyjnym bez modyfikowania plikuwww
wewnątrz folderubin
.Wystarczy zainstalować pakiet za pomocą polecenia:
wymagaj tego w swojej aplikacji:
Utwórz plik .env w katalogu głównym projektu i dodaj w nim port (na przykład), aby nasłuchiwać na porcie 5000
i to wszystko.
Więcej informacji tutaj
źródło
Jeśli używasz Nodemon, przypuszczam, że PORT 3000 jest ustawiony w nodemonConfig. Sprawdź, czy tak jest.
źródło