Zoeken…


Toegang tot omgevingsvariabelen

De eigenschap process.env retourneert een object dat de gebruikersomgeving bevat.

Het retourneert een object als dit:

{
  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'

Als u omgevingsvariabele FOO op foobar zet, is deze toegankelijk met:

process.env.FOO // 'foobar' 

process.argv opdrachtregelargumenten

process.argv is een array met de opdrachtregelargumenten. Het eerste element zal een node , het tweede element zal de naam van het JavaScript-bestand zijn. De volgende elementen zijn eventuele aanvullende opdrachtregelargumenten.

Codevoorbeeld:

Uitvoersom van alle opdrachtregelargumenten

index.js

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

console.log(sum);

Gebruik Exaple:

node index.js 2 5 6 7

Uitgang is 20

Een korte uitleg van de code:

Hier in for lus for (i = 2; i < process.argv.length; i++) begint de lus met 2 omdat de eerste twee elementen in de array process.argv altijd ['path/to/node.exe', 'path/to/js/file', ...]

Converteren naar nummer Number(process.argv[i]) omdat elementen in de array process.argv altijd string zijn

Verschillende eigenschappen / configuratie gebruiken voor verschillende omgevingen zoals dev, qa, enscenering etc.

Grootschalige toepassingen hebben vaak verschillende eigenschappen nodig wanneer ze in verschillende omgevingen worden uitgevoerd. we kunnen dit bereiken door argumenten door te geven aan de NodeJs-toepassing en hetzelfde argument in het knooppuntproces te gebruiken om een specifiek eigenschappenbestand voor de omgeving te laden.

Stel dat we twee eigenschappenbestanden hebben voor verschillende omgevingen.


  • 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"
              }
      }
    

De volgende code in de toepassing exporteert het respectieve eigenschappenbestand dat we willen gebruiken.

Stel dat de code in environment.js is

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;
        }
    }
});

We geven argumenten aan de toepassing als volgt

node app.js env=dev

als we procesmanager voor altijd gebruiken dan is het zo simpel als

forever start app.js env=dev

Hoe het configuratiebestand te gebruiken

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

Omgevingseigenschappen laden vanuit een "eigenschappenbestand"

  • Installatie-eigenschappen lezer:
npm install properties-reader --save
  • Maak een map env om uw eigenschappenbestanden op te slaan:
mkdir env
  • Maak omgevingen.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;
        }
    }
});
  • Voorbeeld van eigenschappenbestand ontwikkeling.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
...
  • Voorbeeldgebruik van de geladen eigenschappen:
var enviorment = require('./environments');
var PropertiesReader = require('properties-reader');
var properties = new PropertiesReader(enviorment);
   
var someVal = properties.get('main.app.port');
  • De express-server starten
npm start env=development

of

npm start env=production


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow