2016-02-12 19 views
17

में एपीआई कुंजी का उपयोग करते समय सबसे अच्छा अभ्यास मेरे पास एक एपीआई कुंजी है जिसका उपयोग मैं अपने नोड.जेएस एप्लिकेशन में कर रहा हूं। वर्तमान में, मैं इसे एक टेक्स्ट फ़ाइल में संग्रहीत करता हूं और जब मेरा एप्लिकेशन शुरू होता है तो इसे वैश्विक चर में डाल दिया जाता है।Node.js

Sooo मूल रूप से यह सिर्फ है:

var key = getKey(); 
useKeyGetData(key); 

मैं इस वैश्विक चर होने पसंद नहीं है, और यह फ़ाइलों के बीच पारित करने के लिए एक दर्द है। क्या मेरी कुंजी पाने के लिए एक बेहतर तरीका है जहां मुझे इसकी आवश्यकता है? क्या ऐसा करने के लिए कुछ मानक है?

+0

किसी .js फ़ाइल में सहेजने और मूल्यों को निर्यात करने में क्या गलत है? फिर आप उन्हें केवल इसकी आवश्यकता हो सकती है जहां आपको इसकी आवश्यकता है। –

+0

जाहिर है, मैं आपके प्रश्न को समझ नहीं पा रहा हूं। यदि आप नहीं चाहते हैं कि इसे वैश्विक रूप से स्थानीय रूप से इसकी आवश्यकता हो। – Kuf

उत्तर

27

आप जो कर रहे हैं उसके पारंपरिक विकल्प, खासकर जब एपीआई कुंजी से संबंधित, environment variables का उपयोग करना है। यह एक ऑपरेटिंग सिस्टम-स्तरीय कॉन्फ़िगरेशन सुविधा है। प्रत्येक प्रक्रिया में पर्यावरण चर के अपने सेट होते हैं, आमतौर पर इसकी मूल प्रक्रिया से विरासत में प्राप्त होता है। सम्मेलन से, पर्यावरण चर के अपरकेस नाम हैं।

node.js में, आप process.env के माध्यम से पर्यावरण चर का उपयोग कर सकते हैं। उदाहरण के लिए, अगर आप इस तरह एक आवेदन चलाएँ:

$ MY_VARIABLE=test node app.js 

आप के माध्यम से MY_VARIABLE वातावरण चर के मूल्य तक पहुँच सकते हैं: यह कठिन हो सकता है

process.env.MY_VARIABLE 

, हालांकि, गुजर रखने के लिए करने के लिए आपके कार्यक्रम के प्रत्येक आमंत्रण पर पर्यावरण चर (ओं)। यही कारण है कि dotenv जैसे पैकेज हैं जो आपको टेक्स्ट फ़ाइल में अपने पर्यावरण चर को स्टोर करने की अनुमति देते हैं।

अधिक विशेष रूप से, आप एक फ़ाइल .env कहा जाता है और उस में आप हो सकता है:

MY_VARIABLE=test 
OTHER_VARIABLE=foo 

अपने app.js की शुरुआत में, आप तो कार्य करें:

require('dotenv').config(); 

यह वातावरण पढ़ता .env फ़ाइल से परिवर्तनीय मान। फिर आप उन तक पहुँच सकते के रूप में आप किसी भी अन्य वातावरण चर का उपयोग होगा:

console.log("MY_VARIABLE: " + process.env.MY_VARIABLE); 
console.log("OTHER_VARIABLE: " + process.env.OTHER_VARIABLE); 

अब आप स्पष्ट रूप से मंगलाचरण पर अपने आवेदन करने के लिए वातावरण चर पारित करने के लिए की जरूरत नहीं है, अर्थात आप बस हमेशा की तरह चला सकते हैं:

$ node app.js 

आप पास एक स्पष्ट रूप से कर है, यह स्थान पर आ जाएगी आप जो भी मान अपने .env फ़ाइल में दिया:

$ MY_VARIABLE=bar node app.js 

अब MY_VARIABLE पर्यावरण चर के "testing" के बजाय "bar" का मान होगा। चूंकि OTHER_VARIABLE स्पष्ट रूप से पारित नहीं किया गया है, यह फ़ाइल में निर्दिष्ट "foo" का मान बरकरार रखता है।

+1

आह, धन्यवाद। वास्तव में जो मैं खोज रहा था: मेरी कुंजी को संभालने के लिए मानक सम्मेलन। –

+0

मैं यह समझने की कोशिश कर रहा हूं कि यह एक अच्छी समझ क्यों है। मैं उत्पादन nodejs सर्वर के लिए dotenv का उपयोग करने की योजना बना रहा हूं, लेकिन यह समझना चाहता हूं कि यह फ़ाइल "' contants.json''' फ़ाइल या npm कॉन्फ़िगरेशन मॉड्यूल कहने से बेहतर कैसे है? क्या आप कृपया पर्यावरण चर के माध्यम से प्रमाण पत्र उत्तीर्ण करने की सुरक्षा/लाभ क्या समझा सकते हैं? – codneto

+0

बस यह सुनिश्चित करने के लिए कि हम एक ही पृष्ठ पर हैं, डॉटेंव को पर्यावरण चर के साथ भ्रमित न करें। dotenv बस एक एनपीएम पैकेज है जो फ़ाइल के उपयोग को समर्थन देकर उनके साथ काम करना आसान बनाता है जहां आप env vars निर्दिष्ट कर सकते हैं। फ़ाइल एक सुविधा है; यह नहीं है कि पर्यावरण चर क्या हैं। एक मनमानी constants.json फ़ाइल पर env vars का लाभ यह है कि यह प्रक्रियाओं को कॉन्फ़िगर करने का मानक तरीका है। डॉकर, systemd, upstart, आदि सभी एक प्रक्रिया के एकाधिक _separate_ उदाहरणों को कॉन्फ़िगर करने के इस तरीके को समझते हैं। –