2016-02-12 39 views
17

Node.js uygulamasında kullanıyorum bir API anahtarım var. Şu anda, bir metin dosyasında saklı tutar ve uygulama başladığında onu global bir değişkene koyarım.Node.js içinde bir API anahtarı kullanırken en iyi uygulama

Sooo temelde bu sadece:

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

ben bu global değişkene sahip sevmiyorum ve bu dosyalar arasında geçirmek için bir acıdır. Anahtarımı nereye/ihtiyacım olduğunda almanın daha iyi bir yolu var mı? Bunu yapmak için bazı standart var mı?

+0

Bir .js dosyasında kaydetme ve değerleri dışa aktarmadaki sorun nedir? O zaman onlara ihtiyacın olan yere ihtiyacın var. –

+0

görünüşe göre, sorunuzu anlamıyorum. Eğer istemiyorsan, küresel olarak yerel olarak gerektirir. – Kuf

cevap

27

Yapmakta olduğunuza, özellikle API anahtarlarına ilişkin geleneksel alternatif, environment variables'u kullanmaktır. Bu işletim sistemi düzeyinde bir yapılandırma olanağıdır. Her işlem genellikle kendi ana işleminden devralınan kendi ortam değişkenleri kümesine sahiptir. Sözleşmeye göre, ortam değişkenleri büyük harfli isimlere sahiptir.

node.js'de ortam değişkenlerine process.env aracılığıyla erişebilirsiniz. Böyle bir uygulamayı çalıştırmak Örneğin,:

$ MY_VARIABLE=test node app.js 

Sen aracılığıyla MY_VARIABLE ortam değişkeninin değerini erişebilirsiniz: Bu sıkıcı olabilir

process.env.MY_VARIABLE 

Ancak geçen tutmak zorunda Programınızın her bir çağrısında ortam değişkeni. Bu nedenle, ortam değişkenlerinizi bir metin dosyasına depolamanıza olanak veren dotenv gibi paketler vardır. Daha spesifik

, sen .env adlı bir dosya olacak ve içinde aşağıdakiler bulunabilir: senin app.js başında

MY_VARIABLE=test 
OTHER_VARIABLE=foo 

, daha sonra yapın:

require('dotenv').config(); 

Bu ortam okur değişken değerleri .env dosyasından.

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

açıkça çağrılması sırasında uygulamanıza ortam değişkenleri geçmesi gerekmez, sadece her zamanki gibi çalıştırabilirsiniz yani:

Başka ortam değişkenleri erişmek gibi Daha sonra erişebilirsiniz
$ node app.js 

sen geçer not bir açık yapmak , bu sizin .env dosyasında verdi ne olursa olsun değer geçersiz kılar:

$ MY_VARIABLE=bar node app.js 

Artık MY_VARIABLE ortam değişkeni "testing" yerine "bar" değerine sahip olacaktır. OTHER_VARIABLE açıkça geçmediğinden, .env dosyasında belirtilen "foo" değerini korur.

+1

Ah, teşekkürler. Tam olarak aradığım şey: anahtarımı işlemek için standart kurallar. –

+0

Bunun neden mantıklı olduğunu anlamayı deniyorum. Ben üretim nodejs sunucu için dotenv kullanmayı planlıyorum, ama bu dosya bir '' 'contants.json''' dosya veya npm yapılandırma modülü diyelim daha iyi olduğunu anlamak ister misiniz? Ortam değişkenleri aracılığıyla kimlik bilgilerinin geçirilmesinin güvenlik/faydasını açıklayabilir misiniz? – codneto

+0

Sadece aynı sayfada olduğumuzdan emin olmak için, dotenv'yi ortam değişkenleriyle karıştırmayın. dotenv, env vars'ı belirleyebileceğiniz bir dosyanın kullanımını destekleyerek onlarla çalışmayı kolaylaştıran bir npm paketidir. Dosya bir rahatlıktır; Bu, ortam değişkenlerinin kendileri hakkında değil. Env'nin avantajı, rasgele bir sabitin üzerinde olabilir.json dosyası, süreçleri yapılandırmanın standart yoludur. Docker, systemd, upstart, vb. Hepsi bir sürecin çoklu _separate_ örneklerini yapılandırma yolunu anlarlar. –