Ricerca…


Accesso alle variabili d'ambiente

La proprietà process.env restituisce un oggetto contenente l'ambiente utente.

Restituisce un oggetto come questo:

{
  TERM: 'xterm-256color',
  SHELL: '/usr/local/bin/bash',
  USER: 'maciej',
  PATH: '~/.bin/:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin',
  PWD: '/Users/maciej',
  EDITOR: 'vim',
  SHLVL: '1',
  HOME: '/Users/maciej',
  LOGNAME: 'maciej',
  _: '/usr/local/bin/node'
}
process.env.HOME // '/Users/maciej'

Se imposti la variabile di ambiente FOO su foobar , sarà accessibile con:

process.env.FOO // 'foobar' 

argomenti della riga di comando process.argv

process.argv è una matrice contenente gli argomenti della riga di comando. Il primo elemento sarà node , il secondo elemento sarà il nome del file JavaScript. Gli elementi successivi saranno gli argomenti aggiuntivi della riga di comando.

Esempio di codice:

Output sum di tutti gli argomenti della riga di comando

index.js

var sum = 0;
for (i = 2; i < process.argv.length; i++) {
    sum += Number(process.argv[i]);
}

console.log(sum);

Uso Exaple:

node index.js 2 5 6 7

L'uscita sarà 20

Una breve spiegazione del codice:

Qui in for loop for (i = 2; i < process.argv.length; i++) loop inizia con 2 perché i primi due elementi nell'array process.argv sono sempre ['path/to/node.exe', 'path/to/js/file', ...]

Conversione in numero Number(process.argv[i]) perché gli elementi nell'array process.argv sono sempre stringhe

Utilizzo di diverse proprietà / configurazione per ambienti diversi come dev, qa, staging, ecc.

Le applicazioni su larga scala spesso hanno bisogno di proprietà diverse quando funzionano su ambienti diversi. possiamo ottenere ciò passando argomenti all'applicazione NodeJs e utilizzando lo stesso argomento nel processo del nodo per caricare un file di proprietà dell'ambiente specifico.

Supponiamo di avere due file di proprietà per diversi ambienti.


  • dev.json

      {
          PORT : 3000,
          DB : {
              host : "localhost",
              user : "bob",
              password : "12345"
          }
      }
    
  • qa.json

      {
              PORT : 3001,
              DB : {
                  host : "where_db_is_hosted",
                  user : "bob",
                  password : "54321"
              }
      }
    

Il codice seguente nell'applicazione esporterà il rispettivo file di proprietà che vogliamo utilizzare.

Supponiamo che il codice sia in environment.js

process.argv.forEach(function (val, index, array) {
    var arg = val.split("=");
    if (arg.length > 0) {
        if (arg[0] === 'env') {
            var env = require('./' + arg[1] + '.json');
            module.exports = env;
        }
    }
});

Diamo argomenti all'applicazione come seguendo

node app.js env=dev

se usiamo process manager come per sempre che sia semplice come

forever start app.js env=dev

Come utilizzare il file di configurazione

 var env= require("environment.js");

Caricamento delle proprietà dell'ambiente da un "file di proprietà"

  • Installa il lettore di proprietà:
npm install properties-reader --save
  • Crea una directory env per memorizzare i tuoi file di proprietà:
mkdir env
  • Crea environments.js :
process.argv.forEach(function (val, index, array) {
    var arg = val.split("=");
    if (arg.length > 0) {
        if (arg[0] === 'env') {
            var env = require('./env/' + arg[1] + '.properties');
            module.exports = env;
        }
    }
});
  • Esempio di file di proprietà development.properties :
# Dev properties
[main]
# Application port to run the node server
app.port=8080

[database]
# Database connection to mysql
mysql.host=localhost
mysql.port=2500
...
  • Esempio di utilizzo delle proprietà caricate:
var enviorment = require('./environments');
var PropertiesReader = require('properties-reader');
var properties = new PropertiesReader(enviorment);
   
var someVal = properties.get('main.app.port');
  • Avvio del server Express
npm start env=development

o

npm start env=production


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow