I am on Ubuntu 12.04 and I'm just learning about environment variables. I am trying to read a custom variable from within my application but it always shows up as undefined
. Here is the code of my test app:
// app.js
console.log('Value: ' + process.env.NODE_ENV);
If I run the following commands you will see that the variable has a value:
$ NODE_ENV=production
$ echo $NODE_ENV
production
I can echo $NODE_ENV
all day and it will continue to show me "production", but when I do process.env.NODE_ENV
in my node application it always displays "undefined".
$ node app.js
Value: undefined
Here is the odd part though, if I display another environment variable that I know already exists, say process.env.PATH
, then it works.
$ node app.js
Value: /usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
Another quirk is that the command printenv list
doesn't appear to contain my custom variable NODE_ENV
despite the fact that echo $NODE_ENV
shows me the correct value. printenv NODE_ENV
shows nothing as well, but printenv PATH
shows the proper value just as it did when I accessed PATH
in my node application.
Any help is much appreciated.
You need to export
shell variables in order to make them available to processes you execute in your shell.
Compare the output of this command:
FOO=bar; bash -c 'echo $FOO'
with the output of this:
export FOO=bar; bash -c 'echo $FOO'
I found my way here from something really silly.
I had just added the new exported variables, but my node process still wasn't seeing them. Then I realized it wasn't enough to restart the node process—I had to open a new terminal (ie. bash instance) too. Once I did this, it worked fine :)
You might want to consider using a library for managing app configuration.
For example nconf helps manage configuration through
And looking at the source is a nice way to learn https://github.com/flatiron/nconf