2011-12-09 8 views
48

आप कैसे पता लगाते हैं कि एक्सप्रेसजेएस ऐप किस वातावरण में चल रहा है? (विकास, परीक्षण, उत्पादन?)। वहाँ process.env में कुछ भी नहीं एक वातावरण का संकेत ...आप express.js ऐप में पर्यावरण का पता कैसे लगाते हैं?

मुझे पता है कि आप प्रत्येक परिवेश के तहत अपने विन्यास फाइल में चर घोषणा कर सकते हैं, लेकिन है कि यदि आप गतिशील मॉड्यूल लोड कर रहे हैं मदद नहीं करता है ...

उत्तर

60

आप या तो app.settings.env (यह एक्सप्रेस में काम करेगा) की जांच करके पर्यावरण की जांच कर सकते हैं, या आप process.env.NODE_ENV (पर्यावरण को उस चर या 'विकास' में देखकर एक और प्रत्यक्ष तरीके से कर सकते हैं डिफ़ॉल्ट < यह अन्य पुस्तकालयों जैसे सॉकेट.आईओ आदि में भी काम करता है)।

+1

धन्यवाद! मैं विकास में दौड़ रहा था, इसलिए NODE_ENV कभी मौजूद नहीं था। मेरे पास लिखने वाले कोड के अंदर 'ऐप' तक पहुंच नहीं है, लेकिन NODE_ENV की जांच कर रहा है और 'विकास' कार्यों को डिफॉल्ट करना – sethvargo

+0

मैं इसे Gruntfile.js से कैसे कर सकता हूं? मैंने दोनों की कोशिश की लेकिन ऐप को परिभाषित नहीं किया गया है और process.env.NODE_ENV अपरिभाषित है। एक रास्ता है? – Vadorequest

+0

यह 'bashrc' में सेटअप करना बेहतर है: http://www.hacksparrow.com/running-express-js-in-production-mode.html – alessioalex

2

यह पता लगा सकता है कि app.settings.env का निरीक्षण करके आप किस वातावरण में हैं।

+1

यदि आपके पास एक्सप्रेस तक पहुंच नहीं है (जैसे एक कस्टम lib मॉड्यूल में) – sethvargo

+3

@ सेठवर्गो पर्यावरण को कन्स्ट्रक्टर या विधि इंजेक्शन के माध्यम से मॉड्यूल में इंजेक्शन देने की आवश्यकता होगी। जैसे myModule.doSomething (app.settings.env)। यदि यह मॉड्यूल निम्न स्तर कोड को उच्च स्तर कोड से बुलाया जाता है, तो मूल्य को कॉल स्टैक को पारित करने की आवश्यकता होती है। –

21

app.get ('env') पर्यावरण को भी वापस कर देगा।

if (app.get('env') === 'development') { 
    app.use(express.errorHandler()); 
} 
+13

लेकिन यह कैसे पता चलता है? एक्सप्रेस कहां से पता चलता है कि 'env' क्या सेट किया गया है। मैंने इसे अपने ऐप के कोड में सेट नहीं किया है। – Costa

+2

@ कोस्टा यह यूनिक्स शैल में 'NODE_ENV' पर्यावरण चर के रूप में सेट है। नोट ** शब्द 'env' यहां भ्रमित रूप से ओवरलोड किया गया है **: यूनिक्स पर्यावरण, जहां ऐप्स के लिए सेटिंग्स कभी-कभी संग्रहीत होती हैं, साथ ही पर्यावरण सेटिंग NODE_ENV जो उत्पादन, विकास इत्यादि निर्धारित करती है – mikemaccana

+1

@ मिकमेकाना, आह, इसे मिला। "ओवरलोडेड" शब्द बहुत कुछ बताता है। बहुत बहुत धन्यवाद! – Costa

9

मैं process.env

"scripts": { 
    "start": "./node_modules/.bin/cross-env NODE_ENV=development ./node_modules/.bin/nodemon server.js", 
    "debug": "./node_modules/.bin/cross-env NODE_ENV=development ./node_modules/.bin/nodemon --debug server.js", 
    "test": "./node_modules/.bin/cross-env NODE_ENV=test ./node_modules/.bin/babel-tape-runner test/test-*.js" 
    }, 

में उन तक पहुँच करने के लिए आपके नोड स्क्रिप्ट के NODE_ENV चर पारित करने के लिए एक सरल तरीके से संबोधित करना चाहेंगे

if (app.get('env') === 'development') { 
    app.use(express.errorHandler()); 
} 
0

के रूप में इस्तेमाल किया जा सकता नहीं कर सकता नोडजे सर्वर का उपयोग करें। app.setting.env

  1. var app = express();
  2. का उपयोग कर टेम्पलेट इंजन के लिए प्रस्तुत करना app.setting.env एक्सप्रेस से नोड env पता लगा सकते हैं।
  3. ब्राउज़र से चेक करें।
0

अन्य उत्तरों में बहुत उपयोगी सिफारिशें हैं। मैं आम तौर पर इस तरह यह कर रहा हूँ:

const environment = process.env.NODE_ENV || 'development'; 

अच्छी बात है कि इस तरह के दृष्टिकोण को व्यक्त करने के लिए दर असल विशिष्ट नहीं है, लेकिन वास्तव में व्यापक Node.js पारिस्थितिकी तंत्र में एक स्वीकृत अभ्यास है।

इसके अलावा, मैंने एक पुन: प्रयोज्य मॉड्यूल लागू किया है, जो सीएलआई तर्क और NODE_ENV चर दोनों का विश्लेषण करके स्वचालित रूप से पर्यावरण का पता लगाने की अनुमति देता है। यह आपकी विकास मशीन पर उपयोगी हो सकता है, क्योंकि आप इस तरह के Node.js प्रोग्राम को CLI तर्क पास करके पर्यावरण को आसानी से बदल सकते हैं: $ node app.js --prod

कृपया अधिक जानकारी देखें और detect-environment's page पर मामलों का उपयोग करें।

संबंधित मुद्दे

 संबंधित मुद्दे