Właśnie zacząłem uczyć się o Express 4.0 w mojej aplikacji Node.js i odkryłem, że wygenerował ./bin/www
plik, w którym zapisywane są tylko serwer aplikacji i ustawienia portu, a wszystko inne, takie jak oprogramowanie pośredniczące i routing, jest zdefiniowane w ./app.js
pliku.
Jednak nie jestem pewien, co to ./bin/www
robi. Użyłem Express 3.xi zawsze definiowałem ustawienia serwera i portu, a także routing i oprogramowanie pośredniczące w tym samym ./app.js
pliku, i uruchamiałem moją aplikację węzła z node app.js
. Więc jaki jest sens używania ./bin/www
? Czy tylko oddziela serwer i definicję portu od innych?
W tej chwili, kiedy tworzę pakiet przy użyciu generatora ekspresowego, package.json
zawiera następującą definicję:
"scripts": {
"start": "node ./bin/www"
}
Zastanawiam się jednak, czy powinienem uruchamiać moją aplikację przy użyciu node ./bin/www
, czy npm start
. Które polecenie należy uruchomić, aby uruchomić aplikację?
A także, kiedy wdrażam moją aplikację w heroku, co powinienem zapisać w Procfile
pliku? Czy web: node app.js
wystarczy?
źródło
Odpowiedzi:
W Express 3.0 normalnie używałbyś
app.configure()
(lubapp.use()
) do skonfigurowania wymaganego oprogramowania pośredniego. Te określone przez Ciebie oprogramowanie pośredniczące jest dostarczane w pakiecie z Express 3.0.Przykład:
Jednak w Express 4.0 całe oprogramowanie pośrednie zostało usunięte, aby można je było konserwować i aktualizować niezależnie od podstawowego Expressu (z wyjątkiem statycznego oprogramowania pośredniego), dlatego należy je wywoływać osobno (co widać w
app.js
).bin/
Katalog służy jako miejsce, gdzie można zdefiniować różne skrypty startowe .www
Jest przykładem, aby uruchomić aplikację wyraźnej jako serwer sieci Web.Ostatecznie możesz mieć różne skrypty, takie jak
test
,stop
lubrestart
, itp. Posiadanie tej struktury pozwala na różne konfiguracje uruchamiania, bez wrzucania wszystkiego do siebieapp.js
.Prawidłowy sposób uruchomienia aplikacji Express to:
Aby wdrożyć aplikację Express 4.x na Heroku , dodaj to do
Procfile
:Lub jeśli możesz po prostu użyć skryptu startowego w swoim
package.json
, heroku użyje go automatycznie, przeczytaj więcej tutajźródło
www
. Nie jestem jednak pewien, dlaczego tak się nazywa - może pochodzi od nazwy World Wide Web?Aplikacje węzłowe, takie jak Express 3.x, używają niestandardowych plików startowych
app.js
, ale jest to niewłaściwy plik do uruchomienia.package.json
maktóry określa wiersz poleceń uruchamiania. Jest to nietrywialne, ponieważ potencjalnie zawiera pełną linię poleceń, a nie tylko ścieżkę do pliku startowego.
źródło
jeśli używasz generatora ekspresowego, po prostu spójrz na swój lokalny plik, wewnątrz pliku ./bin
./bin
znajduje sięwww
plik. Więc kiedy uruchomisznode ./bin/www
, node.js wykona kod wwww
pliku. Nic fajnego.źródło
W systemie Windows użyj tego polecenia:
źródło
Wszystkie powyższe odpowiedzi są dobre. Ale na wypadek, gdybyś chciał użyć
node app.js
tylko wersji Express 3. *. Możesz śledzić poniżej:Ponieważ plik app.js, który został wygenerowany przez generator Express 4, jest teraz modułem Node.js , nie można go już uruchamiać niezależnie jako aplikacji (chyba że zmodyfikujesz kod). Moduł należy załadować do pliku Node.js i uruchomić za pośrednictwem pliku Node.js. W tym przypadku plik Node.js to ./bin/www. Aby uzyskać więcej informacji, odwiedź oficjalną dokumentację .
Ani katalog bin, ani plik www bez rozszerzenia nie są wymagane do tworzenia aplikacji Express lub uruchamiania aplikacji. To tylko sugestie generatora, więc możesz je modyfikować, aby odpowiadały Twoim potrzebom.
Aby pozbyć się katalogu www i zachować „Express 3 way”, usuń wiersz z napisem module.exports = app; na końcu pliku app.js, a następnie wklej w jego miejsce następujący kod:
Następnie zmień
"start": "node ./bin/www"
w pliku package.json . Od tego czasu funkcja ./bin/www została przeniesiona z powrotem do app.js. Teraz zacznij używać"start": "node app.js"
do uruchamiania aplikacji ekspresowej.źródło
umieść to w Procfile
web: node ./bin/www
i sprawdź, czy działa zforeman start
. Aplikacja powinna być dostępna na porcie 5000źródło