ChevCast
ChevCast

Reputation: 59234

Can't read my environment variable in my Node.js app

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.

Upvotes: 34

Views: 34614

Answers (6)

MalcolmOcean
MalcolmOcean

Reputation: 2985

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 :)

(this answer is relevant for when you're exporting the variables from a file, rather than setting them in the current shell instance)

Upvotes: 17

yasir hasan
yasir hasan

Reputation: 87

If you are using dotenv make sure to configure before you access the variables in your environment. The order of your code is mattered in js.

Upvotes: 1

Found my way here from something really silly as well ! I was running my server file from a "src" folder inside my main project directory and so had my .env inside the "src" folder itself (from where my server was running). Once I put the .env in my main project directory, it worked for me. Make sure that your '.env' is in the main directory and not inside "src" folder.

Upvotes: 0

J.Villalon
J.Villalon

Reputation: 1

Restart your bash (source ~/.bashrc). This will take into account your system environment.

Upvotes: -2

250R
250R

Reputation: 37171

You might want to consider using a library for managing app configuration.

For example nconf helps manage configuration through

  • command line argumets
  • environment variables
  • files
  • etc..

And looking at the source is a nice way to learn https://github.com/flatiron/nconf

Upvotes: 0

lanzz
lanzz

Reputation: 43208

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'

Upvotes: 39

Related Questions