NodeJS 无法识别 .env 文件

NodeJS not recognizing .env file

我有 5 个 NodeJS 服务 运行ning,但其中一个有问题。

这是 nodemon.json 文件:

{
  "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"
  }
}

与其他服务一样。当我 运行 npm run dev 时,我收到错误消息,具体取决于从 .env 文件中获取的值,例如:

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,
};

第一条错误信息是: ConfigurationError: Missing node(s) option 产生该消息是因为它没有从 process.env.ELASTIC_PATH 读取值,但是如果我输入一个像“http://with.the.correct.url”这样的硬编码值,它再次尝试读取 运行,我会得到另一个错误:

Error: Credentials must be provided when creating a service client 该错误是因为它试图读取 password:process.env.MONGO_PASSWORDuser:process.env.MONGO_USER

等,因此,读取.env文件时出现问题。我知道 .env 文件具有这些值,并且该文件是 UTF-8 格式,没有引号等。.env 文件与其他服务是同一个文件,它在其余部分工作正常但是我不知道为什么这里没有人阅读。

有什么想法吗?

编辑:

另外,我在 config.ts 文件中放入了一个 console.log(process.env);,它显示的值如下:

但是 .env 中没有值,例如,图片中有一个名为 COMPUTERNAME 的值,所以如果我输入 console.log(process.env.COMPUTERNAME);,我会得到:IBM-NOT87

为什么没有获取 .env 文件?

看来您需要 require/configure dotenvDocs:

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

require('dotenv').config()

进一步扩展@JBallin 的回答

您应该在 app.js

上使用它
  • 或者,如果这不起作用,那么您需要将其显式添加到您要使用这些变量的文件中

分享图片,因为有时展开后更容易看到

代码在这里=>

require('dotenv/config') // require the dotenv/config at beginning of file
const express = require('express')
const mongoose = require('mongoose')

require('dotenv').config({ path: "./sample.env" });

在您使用环境变量的文件中, 尽早要求 "dotenv" 并在 config() 方法中指定 .env 文件的路径,即使它位于您的根目录或节点启动的同一目录中。

要求指定同目录文件的代码在答案的第一行

此外,如需进一步阅读,您可以访问 https://github.com/motdotla/dotenv#path

你猫试试这个。

-> npm i dotenv

并在代码中加入这段代码

require('dotenv').config({
    path: 'your path here'
})

安装 dotenv 包

npm install --s dotenv

并在 index.js/ts 文件中添加此 require("dotenv").config();