Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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.

like image 649
Chev Avatar asked May 29 '12 17:05

Chev


People also ask

Where is .env file in node?

The dotenv package for handling environment variables is the most popular option in the Node. js community. You can create an. env file in the application's root directory that contains key/value pairs defining the project's required environment variables.


2 Answers

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'
like image 151
lanzz Avatar answered Sep 28 '22 11:09

lanzz


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

like image 45
MalcolmOcean Avatar answered Sep 28 '22 10:09

MalcolmOcean