To jest moja aplikacja, obecnie pracuję nad produkcją.
var app = express();
app.set('views',settings.c.WEB_PATH + '/public/templates');
app.set('view engine','ejs');
app.configure(function(){
app.use(express.favicon());
app.use(express.static(settings.c.WEB_PATH + '/public'));
app.use(express.bodyParser());
app.use(express.cookieParser());
app.use(express.methodOverride());
app.use(express.session({
cookie:{ domain:"."+settings.c.SITE_DOMAIN, maxAge:1440009999},
secret:'hamster',
store: r_store,
}));
app.use(useragent.express());
app.use(flash());
app.use(passport.initialize());
app.use(passport.session());
});
Jednak poznałem NODE_ENV
i chcę z niego korzystać. W jaki sposób mogę to zrobić?
javascript
node.js
express
TIMEX
źródło
źródło
app.configure('development', ...)
lub „produkcji”, aby ustawić określone ustawienia tylko dla środowisk programistycznych lub produkcyjnych. Zobacz expressjs.com/api.html#app.configureOdpowiedzi:
NODE_ENV
jest zmienną środowiskową upowszechnioną przez ekspresowy framework webserver. Gdy aplikacja węzłowa jest uruchomiona, może sprawdzić wartość zmiennej środowiskowej i wykonywać różne czynności na podstawie tej wartości.NODE_ENV
w szczególności jest używany (zgodnie z konwencją) do stwierdzenia, czy dane środowisko jest środowiskiem produkcyjnym czy programistycznym . Typowym przypadkiem użycia jest uruchomienie dodatkowego kodu debugowania lub logowania, jeśli działa w środowisku programistycznym.Dostęp do NODE_ENV
Możesz użyć następującego kodu, aby uzyskać dostęp do zmiennej środowiskowej, abyś mógł wykonać własne kontrole i logikę:
var environment = process.env.NODE_ENV
Lub alternatywnie przy użyciu express ”
app.get('env')
( uwaga: domyślnie jest"development"
)Pamiętaj, że jeśli nie ustawiłeś wyraźnie
NODE_ENV
dla swojego środowiska, tak będzieundefined
.Ustawienie NODE_ENV
Sposób faktycznego ustawienia zmiennej środowiskowej różni się w zależności od systemu operacyjnego, a także zależy od konfiguracji użytkownika.
Jeśli chcesz ustawić zmienną środowiskową jako jednorazową, możesz to zrobić z wiersza poleceń:
export NODE_ENV=production
$env:NODE_ENV = 'production'
W dłuższej perspektywie powinieneś to zachować, aby nie zresetować się po ponownym uruchomieniu - zamiast wypisać wszystkie możliwe metody, to pozwolę ci poszukać, jak to zrobić!
Konwencja dictacted, że istnieją tylko dwie wartości należy użyć do
NODE_ENV
, alboproduction
albodevelopment
, wszystko małymi literami. Nic nie stoi na przeszkodzie, aby dodać więcej wartości, ale prawdopodobnie nie jest to dobry pomysł, ponieważ widzę dużo tego rodzaju kodu w wielu modułach node_modu, których używam:Zauważ, że naprawdę złym pomysłem jest próba ustawienia
NODE_ENV
z poziomu samej aplikacji węzła - jeśli to zrobisz, będzie ona dotyczyć tylko procesu, w którym została ustawiona , więc prawdopodobnie rzeczy nie będą działać tak, jak się tego spodziewasz. Nie rób tego - pożałujesz.źródło
app.configure()
został usunięty. Przewodnik migracji Express 4 zaleca „używanieprocess.env.NODE_ENV
lubapp.get('env')
wykrywanie środowiska i odpowiednie konfigurowanie aplikacji”.app.get('env')
z tego właśnie powodu. Zakrywa to, że ta ważna zmienna nie jest ustawiona - co sprawia, że wydaje się niespójna, gdy uzyskujesz do niej dostęp spoza ekspresu. Ponadto uważam, że mniej szkodliwe jest przypadkowe uruchomienie kodu debugowania w środowisku programistycznym niż przypadkowe uruchomienie go w środowisku produkcyjnym.development
oznacza to, że między innymi szablony będą przetwarzane ponownie dla każdego żądania. Konsekwencją jest zwiększenie lub zmniejszenie wydajności o ~ 75% między produkcją a rozwojem przy użyciu Jade. Stworzyłem również wpis na blogu na tym apmblog.dynatrace.com/2015/07/22/…NODE_ENV to zmienna środowiskowa, która oznacza środowisko węzłowe w serwerze ekspresowym.
W ten sposób ustalamy i wykrywamy środowisko, w którym się znajdujemy.
Jest to bardzo często używane
production
idevelopment
.Zestaw:
Dostać:
Możesz to uzyskać za pomocą
app.get('env')
źródło
Zakładam, że pierwotne pytanie zawierało, w jaki sposób Express używa tej zmiennej środowiskowej.
Express używa NODE_ENV do zmiany własnego domyślnego zachowania. Na przykład w trybie programowania domyślna procedura obsługi błędów odeśle stos śledzenia do przeglądarki. W trybie produkcyjnym reakcja polega po prostu
Internal Server Error
na uniknięciu przecieków na całym świecie.źródło
Zazwyczaj
NODE_ENV
zmiennej używasz do wykonywania specjalnych działań podczas opracowywania, testowania i debugowania kodu. Na przykład, aby uzyskać szczegółowe wyniki rejestrowania i debugowania, których nie chcesz produkować. Sam Express działa inaczej w zależności od tego, czyNODE_ENV
jest ustawiony naproduction
czy nie. Możesz to zobaczyć, umieszczając te wiersze w aplikacji Express, a następnie wysyłając żądanie HTTP GET w celu/error
:Zauważ, że ten ostatni
app.use()
musi być ostatni, po wszystkich innych metodach obsługi metod!Jeśli ustawisz
NODE_ENV
opcjęproduction
przed uruchomieniem serwera, a następnie wyśleszGET /error
do niego żądanie, nie powinieneś widzieć tekstuForcing an error!
w konsoli, a odpowiedź nie powinna zawierać śladu stosu w treści HTML (pochodzącej z Express). Jeśli zamiast tego ustawiszNODE_ENV
coś innego przed uruchomieniem serwera, powinno być odwrotnie.W systemie Linux ustaw zmienną środowiskową NODE_ENV w następujący sposób:
źródło