2016-02-12 21 views
17

Ho una chiave API che sto utilizzando nella mia applicazione Node.js. Attualmente, lo tengo memorizzato in un file di testo e lo metto in una variabile globale all'avvio dell'applicazione.Procedura consigliata quando si utilizza una chiave API in Node.js

Era talmente in fondo è solo:

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

non mi piace avere questa variabile globale, ed è un dolore per passare tra i file. C'è un modo migliore per ottenere la mia chiave dove/quando ne ho bisogno? C'è qualche standard per farlo?

+0

Cosa c'è di sbagliato nel salvarlo in un file .js ed esportare i valori? Quindi puoi semplicemente richiederli dove ne hai bisogno. –

+0

a quanto pare, non capisco la tua domanda. se non lo vuoi globalmente lo richiede localmente. – Kuf

risposta

27

L'alternativa convenzionale a ciò che si sta facendo, specialmente quando si tratta di chiavi API, è utilizzare environment variables. Questa è una funzione di configurazione a livello di sistema operativo. Ogni processo ha il proprio insieme di variabili d'ambiente, generalmente ereditato dal suo processo genitore. Per convenzione, le variabili di ambiente hanno nomi maiuscoli.

In node.js, è possibile accedere alle variabili di ambiente tramite process.env. Ad esempio, se si esegue una domanda come questa:

$ MY_VARIABLE=test node app.js 

è possibile accedere al valore della variabile MY_VARIABLE ambiente tramite:

process.env.MY_VARIABLE 

Può essere noioso, tuttavia, avere a tenere passando il variabile di ambiente (s) su ogni invocazione del tuo programma. Ecco perché esistono pacchetti come dotenv che consentono di memorizzare le variabili di ambiente in un file di testo.

Più in particolare, si avrà un file chiamato .env e in essa si potrebbe avere:

MY_VARIABLE=test 
OTHER_VARIABLE=foo 

All'inizio della vostra app.js, si poi fare:

require('dotenv').config(); 

Questa legge l'ambiente valori variabili dal file .env. È quindi possibile accedervi come si farebbe accedere ad altre variabili di ambiente:

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

Ora non c'è bisogno di passare esplicitamente le variabili di ambiente per l'applicazione in base alla chiamata, cioè si può semplicemente eseguire come al solito:

$ node app.js 

Se fai passaggio uno in modo esplicito, che sostituirà qualsiasi valore avete dato nel file di .env:

$ MY_VARIABLE=bar node app.js 

Ora la variabile di ambiente MY_VARIABLE avrà un valore di "bar" anziché "testing". Poiché OTHER_VARIABLE non viene passato in modo esplicito, mantiene il valore di "foo" specificato nel file .env.

+1

Ah, grazie. Esattamente quello che stavo cercando: convenzioni standard per la gestione della mia chiave. –

+0

Sto cercando di capire perché questo è un buon senso. Sto pensando di usare dotenv per il server di produzione dei nodi, ma voglio capire come è meglio questo file di un file '' 'contants.json''' o un modulo di configurazione di npm? Puoi spiegare, per favore, qual è la sicurezza/beneficio delle credenziali di passaggio attraverso le variabili di ambiente? – codneto

+0

Giusto per essere sicuri che siamo sulla stessa pagina, non confondere dotenv con le variabili di ambiente stesse. dotenv è semplicemente un pacchetto npm che rende più facile lavorare con loro supportando l'uso di un file in cui è possibile specificare env vars. Il file è una comodità; non è ciò di cui si occupano le variabili di ambiente. Il vantaggio di env vars su un file constants.json arbitrario è che è il modo standard di configurare i processi. Docker, systemd, upstart, ecc. Comprendono tutti questo modo di configurare più istanze _separate_ di un processo. –