Node.js

Environment

Accessing environment variables

The process.env property returns an object containing the user environment.

It returns an object like this one :

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

If you set environment variable FOO to foobar, it will be accessible with:

process.env.FOO // 'foobar' 

process.argv command line arguments

process.argv is an array containing the command line arguments. The first element will be node, the second element will be the name of the JavaScript file. The next elements will be any additional command line arguments.

Code Example:

Output sum of all command line arguments

index.js

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

console.log(sum);

Usage Exaple:

node index.js 2 5 6 7

Output will be 20

A brief explanation of the code:

Here in for loop for (i = 2; i < process.argv.length; i++) loop begins with 2 because first two elements in process.argv array always is ['path/to/node.exe', 'path/to/js/file', ...]

Converting to number Number(process.argv[i]) because elements in process.argv array always is string

Using different Properties/Configuration for different environments like dev, qa, staging etc.

Large scale applications often need different properties when running on different environments. we can achieve this by passing arguments to NodeJs application and using same argument in node process to load specific environment property file.

Suppose we have two property files for different environment.


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

Following code in application will export respective property file which we want to use.

Suppose the code is 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;
        }
    }
});

We give arguments to the application like following

node app.js env=dev

if we are using process manager like forever than it as simple as

forever start app.js env=dev

How to use the configuration file

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

Loading environment properties from a “property file”

  • Install properties reader:

    npm install properties-reader —save

  • Create a directory env to store your properties files:

    mkdir env

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

  • Sample development.properties properties file:

    Dev properties

    [main]

    Application port to run the node server

    app.port=8080

    [database]

    Database connection to mysql

    mysql.host=localhost mysql.port=2500 …

  • Sample usage of the loaded properties:

    var enviorment = require(‘./environments’); var PropertiesReader = require(‘properties-reader’); var properties = new PropertiesReader(enviorment);

    var someVal = properties.get(‘main.app.port’);

  • Starting the express server

    npm start env=development

or

npm start env=production

This modified text is an extract of the original Stack Overflow Documentation created by the contributors and released under CC BY-SA 3.0 This website is not affiliated with Stack Overflow