49

I'm using environment variables on my mac to store some sensitive credentials, and trying to access them through Node. I added them into my environment profile with

export VARIABLE_NAME=mySensitiveInfo

When I use echo $VARIABLE_NAME I receive the correct output (my sensitive info).

However, when I am trying to access this same variable in Node with process.env.VARIABLE_NAME and try to print it out on the console, I get an undefined.

Other environment variables appear to be okay though. For example, when I console.log(process.env.FACEBOOK_CALLBACK_URL), it prints the correct value to my console. I added FACEBOOK_CALLBACK_URL a few days ago.

Do I have to restart my machine or something? Does it take a certain time before environment variables become available in Node? The closest answer I've seen on SO is this post, but nobody was able to figure out why it was happening.

Yu Chen
  • 5,056
  • 5
  • 39
  • 76

5 Answers5

37

process.env.VARIABLE_NAME returns undefined because the Node.js execution environment does not know the newly added VARIABLE_NAME yet. To fix the issue, the Node.js execution environment (e.g. IDE) need to restart.

The following steps can be used to reproduce this issue:

  1. Open IDE such as WebStorm and write a simple Node.js program: console.log(process.env.VARIABLE_NAME). It will print undefined as expected, as VARIABLE_NAME is not defined yet. Keep the IDE running, don't close it.
  2. Open environment profile such as .bash_profile and add export VARIABLE_NAME=mySensitiveInfo in it.
  3. Open system console and run source .bash_profile, so that the above export statement will be executed. From now on, whenever system console is opened, VARIABLE_NAME environment variable exists.
  4. In system console, execute the Node.js program in step 1, it will print mySensitiveInfo.
  5. Switch to IDE and execute Node.js program, it will print undefined.
  6. Restart the IDE and execute Node.js program, this time, it will print mySensitiveInfo
shaochuancs
  • 13,987
  • 3
  • 48
  • 56
37

nodemon.json file is only for setting nodemon specific configuration So for create custom environment variables we can use dotenv package

First , Install dotenv package

npm install dotenv --save

after that create .env file in root and include environment variables as bellows

MONGO_ATLAS_PW=xxxxx
JWT_KEY=secret

Finally, inside your app.js file insert following after your imports.

require('dotenv').config()

Then you can use environment varibale like this

process.env.MONGO_ATLAS_PW
process.env.JWT_KEY
Sumith Ekanayake
  • 1,065
  • 12
  • 11
  • 2
    this straightforwardly worked for me. thanks. – Heila Al-Mogren Jan 29 '22 at 02:06
  • 1
    Note:- By "after that create .env file in root" OP means that you have to create the .env file in the same folder where you have your package.json. This worked for me :) – anurag1905 Feb 05 '22 at 20:13
  • Note: when sending .env files over discord the "." drops off leaving an "env" file. Make sure there is a dot at the start! Also I wouldn't recommend sending over discord anyway. try usb or other secure methods – billy bud Feb 17 '22 at 06:46
4

I got a problem just now , and I use this solved it in webpack config

const plugins = [
    new webpack.NoEmitOnErrorsPlugin(),
    // after compile global will defined `process.env` this Object
    new webpack.DefinePlugin({
      BUILD_AT : Date.now().toString(32),
      DEBUG: process.env.NODE_ENV !== 'production',
          'process.env': {
              'NODE_ENV': JSON.stringify(process.env.NODE_ENV || "development"),
              'VARIABLE_NAME': JSON.stringify(process.env.VARIABLE_NAME)
     }
   })
]
kingzez
  • 41
  • 3
0

please check the dir of .env file, If it is in same file as your app.js or (abc.js) than move .env to one level up

sunilsalat
  • 101
  • 7
  • 2
    Your answer could be improved with additional supporting information. Please [edit] to add further details, such as citations or documentation, so that others can confirm that your answer is correct. You can find more information on how to write good answers [in the help center](/help/how-to-answer). – Community Nov 08 '21 at 17:33
0

Close the code Runner Or Ide environment once and reopen it. If you use VS code, close it completely. (Or CMD or Power Shell or ...)

Stefano Sansone
  • 2,001
  • 6
  • 12
  • 29