Node.js
Ambiente
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