NODE_ENV क्या है और एक्सप्रेस में इसका उपयोग कैसे करें?


182

यह मेरा ऐप है, मैं वर्तमान में उत्पादन पर चल रहा हूं।

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());
});

हालांकि, मुझे इसके बारे में पता चला NODE_ENVऔर इसका इस्तेमाल करना चाहता हूं। मैं यह कैसे कर सकता हूँ?


आपके मामले में मुझे लगता है कि आप क्या उपयोग कर सकते हैं app.configure('development', ...)या "उत्पादन" केवल विकास या उत्पादन वातावरण के लिए कुछ सेटिंग्स निर्धारित करने के लिए है। Expressjs.com/api.html#app.configure
एंड्रियास हॉल्टग्रेन

जवाबों:


357

NODE_ENVएक पर्यावरण चर है जिसे एक्सप्रेस वेबसर्वर फ्रेमवर्क द्वारा लोकप्रिय बनाया गया है । जब एक नोड एप्लिकेशन चलाया जाता है, तो यह पर्यावरण चर के मूल्य की जांच कर सकता है और मूल्य के आधार पर विभिन्न चीजें कर सकता है। NODE_ENVविशेष रूप से उपयोग (सम्मेलन द्वारा) यह बताने के लिए कि क्या एक विशेष वातावरण उत्पादन या विकास का वातावरण है। एक सामान्य उपयोग-मामला अतिरिक्त डिबगिंग या लॉगिंग कोड चला रहा है अगर एक विकास के वातावरण में चल रहा है।

NODE_ENV तक पहुँचना

आप पर्यावरण चर का उपयोग करने के लिए निम्न कोड का उपयोग कर सकते हैं ताकि आप अपनी जाँच और तर्क कर सकें:

var environment = process.env.NODE_ENV

या वैकल्पिक रूप से एक्सप्रेस 'का उपयोग करें app.get('env')( ध्यान दें: यह चूक "development")

ध्यान रखें कि यदि आप स्पष्ट रूप से सेट नहीं किया है हो सकता है NODE_ENVअपने परिवेश के लिए, यह हो जाएगा undefined

NODE_ENV सेट करना

पर्यावरण चर को वास्तव में कैसे सेट करें यह ऑपरेटिंग सिस्टम से ऑपरेटिंग सिस्टम में भिन्न होता है, और आपके उपयोगकर्ता सेटअप पर भी निर्भर करता है।

यदि आप पर्यावरण चर को एक-बंद के रूप में सेट करना चाहते हैं, तो आप कमांड लाइन से ऐसा कर सकते हैं:

  • लिनक्स और मैक :export NODE_ENV=production
  • खिड़कियां :$env:NODE_ENV = 'production'

लंबी अवधि में आपको इसे जारी रखना चाहिए ताकि यदि आप रिबूट न ​​करें तो यह परेशान न हो - ऐसा करने के लिए सभी संभावित तरीकों को सूचीबद्ध करने के बजाय, मैं आपको यह खोज करने दूंगा कि यह कैसे करना है!

कन्वेंशन ने तय किया है कि केवल दो ही मूल्य हैं जिन्हें आपको या NODE_ENVतो सभी लोअरकेस के लिए उपयोग करना चाहिए । अधिक मूल्यों को जोड़ने से आपको कुछ भी नहीं रोक सकता है, लेकिन यह शायद एक अच्छा विचार नहीं है, क्योंकि मैं कई नोड_मॉड्यूल्स में इस तरह का कोड देखता हूं, जिनका मैं उपयोग करता हूं:productiondevelopment

var development = process.env.NODE_ENV !== 'production';

ध्यान दें कि एक नोड एप्लिकेशन के भीतर से सेट करने का प्रयास करना वास्तव में एक बुरा विचार हैNODE_ENV - यदि आप ऐसा करते हैं तो यह केवल उस प्रक्रिया पर लागू होगा जहां से इसे सेट किया गया था , इसलिए चीजें संभवत: ऐसे काम नहीं करेंगी जैसे आप उनसे उम्मीद करते हैं। यह मत करो - आप इसे पछतावा होगा।


5
एक्सप्रेस 4 में, app.configure()हटा दिया गया है। एक्सप्रेस 4 माइग्रेशन मार्गदर्शिका के लिए सिफारिश की गई है "उपयोग process.env.NODE_ENVया app.get('env')पर्यावरण का पता लगाने और उसके अनुसार ऐप्लिकेशन कॉन्फ़िगर कर।"
क्रिस बर्टले 13

3
मुझे लगता है कि app.get ('env') का उपयोग करना सबसे अच्छा है क्योंकि अगर पर्यावरण अनिर्धारित नोड डिफॉल्ट है देव के लिए जहां सिर्फ चर की जाँच करते हुए स्वयं अपरिभाषित देता है
light24bulbs

11
अच्छा बिंदु - मैंने डिफ़ॉल्ट को हाइलाइट करने के लिए एक नोट जोड़ा। हालाँकि मेरी व्यक्तिगत भावना यह है कि आपको app.get('env')उस कारण का सटीक उपयोग नहीं करना चाहिए । यह कवर करता है कि यह महत्वपूर्ण चर सेट नहीं है - जब आप इसे एक्सप्रेस के बाहर से एक्सेस करते हैं तो चीजें असंगत लगती हैं। इसके अलावा मुझे लगता है कि डिबग कोड का विकास क्षेत्र में गलती से न चलना हानिकारक है, क्योंकि यह गलती से किसी उत्पादन परिवेश पर चल रहा है।
एड हिंचलिफ़

5
मैंने एक्सप्रेस एप्लिकेशन में NODE_ENV सेटिंग छोड़ने के प्रभावों को मापा है। यह developmentअन्य चीजों के बीच - जिसका अर्थ है कि टेम्पलेट्स को हर अनुरोध के लिए पुन: मुद्रित किया जाएगा। परिणाम जेड के उपयोग के दौरान उत्पादन और विकास के बीच ~ 75% का प्रदर्शन लाभ या नाली है। मैंने उस apmblog.dynatrace.com/2015/07/22/…
डैनियलकहान

8
मुझे लगता है कि परियोजनाओं के लिए "उत्पादन" और "विकास" के अलावा, आपको स्वचालित परीक्षणों को चलाने के लिए कम से कम एक और "परीक्षण" की आवश्यकता होगी। आप आबादी परीक्षण डेटा के लिए एक अलग DB का उपयोग करना चाह सकते हैं।
dawnstar

19

NODE_ENV एक पर्यावरण चर है जो एक्सप्रेस सर्वर में नोड वातावरण के लिए खड़ा है।

यह है कि हम किस तरह का माहौल बनाते हैं और उसका पता लगाते हैं।

इसे का उपयोग बहुत ही आम है productionऔर development

सेट:

export NODE_ENV=production

प्राप्त:

आप इसका उपयोग करके प्राप्त कर सकते हैं app.get('env')


10

मुझे लगता है कि मूल प्रश्न शामिल है कि एक्सप्रेस इस पर्यावरण चर का उपयोग कैसे करता है।

एक्सप्रेस अपने स्वयं के डिफ़ॉल्ट व्यवहार को बदलने के लिए NODE_ENV का उपयोग करता है। उदाहरण के लिए, विकास मोड में, डिफ़ॉल्ट त्रुटि हैंडलर वापस ब्राउज़र को स्टैकट्रेस भेज देगा। उत्पादन मोड में, Internal Server Errorदुनिया के लिए कार्यान्वयन विवरणों को लीक करने से बचने के लिए, प्रतिक्रिया बस है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.