Undefined process.env variable with dotenv and nodejs

10,059

Solution 1

By default the dotenv package does only load a file named .env if you want to load another file you need to specify the path

require("dotenv").config({ path: "path/to/file" })

Resources:

https://www.npmjs.com/package/dotenv

Solution 2

When using import instead of require. -

You can use -r (require) to preload dotenv. You do not need to require and load dotenv in your application code.

 $ node -r dotenv/config app.js

Solution 3

I was having somewhat the same problem for a while turns out you just have to put the .env file in the root of the directory (top-most level).

I know this post is old but I just want to make sure no one struggles with such a simple task again.

Share:
10,059
thomasA
Author by

thomasA

Updated on July 19, 2022

Comments

  • thomasA
    thomasA almost 2 years

    I have a problem with the dotenv package.

    My application folder:

     |_app_folder
          |_app.js
          |_password.env
          |_package.json
    

    I've of course install dotenv, but when i tried to log a process.env variables, the result is always undefined, please can you help me ?

    password.env :

    //password.env 
    CLIENT_ID=xxxxxxxx
    

    app.js :

    //app.js
    const express = require('express');
    const app = express();
    const Twig = require("twig");
    
    //Require dotenv
    require('dotenv').config();
    
    // Setting the Twig options
    app.set("twig options", {
        allow_async: true, 
        strict_variables: false
    });
    
    app.get('/', function (req, res) {
      //Trying to log it
      console.log(process.env.CLIENT_ID);
      //
      res.render('index.twig', {
        date : new Date().toString()
      });
    });
    
    app.get('/instagram',function(req,res){
      // Building the URL
      let url = 'https://api.instagram.com/oauth/authorize/?client_id=';
      // Redirect to instagram for oauth 
      res.redirect(url);
    })
    
    app.listen(3000, function () {
      console.log('Running');
    })
    

    Thank you for your time.

  • thomasA
    thomasA over 5 years
    Thanks you i didn't know that, i replace the require with this one : require("dotenv").config(path.join(__dirname,'password.env')‌​); but it still don't work
  • Patrick Hollweck
    Patrick Hollweck over 5 years
    Try to log the path you are creating and check if it is correct
  • thomasA
    thomasA over 5 years
    i've did and it's the good one : /home/thomas/instagram-oauth-login/password.env
  • Patrick Hollweck
    Patrick Hollweck over 5 years
    No problem, I messed that up! Sorry
  • Titou
    Titou almost 5 years
    As a complement I had a weird case where the .env file is not loaded either, and I had to add require("dotenv").config({path:".env"})