Undefined process.env variable with dotenv and nodejs
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.
thomasA
Updated on July 19, 2022Comments
-
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 over 5 yearsThanks 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 over 5 yearsTry to log the path you are creating and check if it is correct
-
thomasA over 5 yearsi've did and it's the good one : /home/thomas/instagram-oauth-login/password.env
-
Patrick Hollweck over 5 yearsNo problem, I messed that up! Sorry
-
Titou almost 5 yearsAs 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"})