【问题标题】:NodeJS not recognizing .env fileNodeJS 无法识别 .env 文件
【发布时间】:2020-07-17 04:27:49
【问题描述】:

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

这是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 文件?

【问题讨论】:

  • 请给我看看你的 .env 文件和它的位置
  • 在应用程序的根目录。好的,我将使用文件的某些部分编辑 que 问题并附上评论
  • require('dotenv').config();在您尝试访问 env fie 的地方添加这些文件。并且像这样访问process.env.NODE_ENV 并且必须安装'dotenv'

标签: node.js environment-variables dotenv


【解决方案1】:

似乎您需要/配置dotenvDocs:

尽早在您的应用程序中要求并配置 dotenv。

require('dotenv').config()

【讨论】:

  • 我应该把那个放在哪里?抱歉,使用 nodejs 的第一天,我已经花了 12 个小时来安装这 12 个微服务......这是唯一一个有问题的人
  • 理想的应用程序入口点,有时命名为app.js。这会将您的.env 加载到process.env
  • 应该在这里注册:exec": "node -r ts-node/register -r dotenv/config Index.ts dotenv_config_path=$(pwd)/.env", 那个脚本叫做nodemon 它是由npm start dev运行的
  • 伙计……我不明白。当我在整个文件夹中搜索时,其余的微服务实际上并没有那个字符串。但是我把那行放在 Index.js 的第一部分,现在它可以工作了。我真的不明白。
  • Index.js 很棒!很高兴它有效。我不肯定那个 exec 脚本是如何工作的。关于其他微服务,您是否尝试过搜索“dotenv”的所有实例 - 还有其他方法可以要求/配置它。
【解决方案2】:

进一步扩展@JBallin 回答

你应该在你的app.js上使用它

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

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

代码在这里=>

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

【讨论】:

    【解决方案3】:

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

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

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

    另外,为了进一步阅读?,您可以访问https://github.com/motdotla/dotenv#path

    【讨论】:

      【解决方案4】:

      你猫试试这个。

      -> npm i dotenv

      并在代码中添加这段代码

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

      【讨论】:

      • 这个“新”答案所做的唯一一件事就是重复一半其他答案已经说过的话,包括accepted answer
      【解决方案5】:

      安装 dotenv 包

      npm install --s dotenv

      并将这个require("dotenv").config(); 添加到 index.js/ts 文件中。

      【讨论】:

        猜你喜欢
        • 2021-03-23
        • 2018-03-18
        • 1970-01-01
        • 2021-09-21
        • 2018-02-15
        • 1970-01-01
        • 2015-05-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多