NodeJS not recognizing .env file

pmiranda picture pmiranda · Apr 5, 2020 · Viewed 7k times · Source

I have like 5 NodeJS services running, but I have a problem in one of those.

This is the nodemon.json file:

{
  "watch": ["**/*.ts"],
  "ext": "ts,json",
  "ignore": ["./test/*.ts"],
  "exec": "node -r ts-node/register -r dotenv/config Index.ts dotenv_config_path=$(pwd)/.env",
  "env": {
    "NODE_ENV": "development"
  }
}

It's the same as the rest of services. When I run npm run dev I got error messages depending on which value is taking from the .env file, example:

const LOCAL_CONFIGURATION = {
    PORT_APP: 8082,
    MONGODB: {
        SERVER: process.env.MONGO_DTE,
        AUTH: {
            auth: {
                password:process.env.MONGO_PASSWORD,
                user:process.env.MONGO_USER
            }
        },
    },
    MS_NOTIFICACION: "http://localhost:8089/notificacion",
    ELASTIC_PATH: process.env.ELASTIC_PATH,
    ...COMMON,
};

The first error message is: ConfigurationError: Missing node(s) option That message is produced because it's not reading the value from process.env.ELASTIC_PATH, but if I put a hardcoed value like "http://with.the.correct.url" and it tries again to run, I get another error:

Error: Credentials must be provided when creating a service client That error is because it's trying to read password:process.env.MONGO_PASSWORD and user:process.env.MONGO_USER

etc, so, there's a problem on reading the .env file. I know that .env file has those values, and the file is in UTF-8, without quotes, etc. The .env file is the same file as the other services, it works ok in the rest but I don't know why is not getting read here.

Any idea?

EDIT:

enter image description here

Plus, I put a console.log(process.env); in config.ts file and it shows values like this:

enter image description here

But there's no values from the .env for example, there in the picture there's a value called COMPUTERNAME so if I put console.log(process.env.COMPUTERNAME); I get: IBM-NOT87

Why is not getting the .env file?

Answer

JBallin picture JBallin · Apr 5, 2020

Seems like you need to require/configure dotenv. Docs:

As early as possible in your application, require and configure dotenv.

require('dotenv').config()