【问题标题】:DOTENV Windows Environment Variables but no others showing upDOTENV Windows 环境变量,但没有其他显示
【发布时间】:2020-03-08 17:19:18
【问题描述】:

我正在使用 Node,我在我的 PC 上安装了 dotenv,并在 .env 文件中存储了一个虚拟环境变量 (API_KEY=43783283287)。

还要考虑以下文件的路径(如果有帮助):

  • app.js 存储在 bloccit/src/app.js 中
  • .env 存储在 bloccit/.env 中
  • main-config.js 存储在 bloccit\src\config\main-config.js 中

要全图,这也是代码摘录

main-config.js:

require("dotenv").config()
const path = require("path");
const viewsFolder = path.join(__dirname, "..", "views");

app.js:

const express = require("express");
const app = express();

const appConfig = require("./config/main-config.js");

console.log(process.env); //returns windows environment variables
console.log(process.env.API_KEY); //returns undefined

const routeConfig = require("./config/route-config.js");

appConfig.init(app, express);
routeConfig.init(app);

module.exports = app;

.env:

API_KEY=43783283287

问题:当我运行我的 app.js 文件(其中包括 console.log(process.env))时,我得到了所有 Windows 环境变量的列表(见下图),但我没有在列表中看到我的 API_KEY。

另外,如果我执行console.log(process.env.API_KEY),它会返回undefined

我做错了什么?

【问题讨论】:

  • 一方面,您没有显示实际调用 dotenv 的代码。因为除非您实际加载它,否则它不会向 process.env 添加任何内容。
  • 嗨@Mike'Pomax'Kamermans,我包含上面的代码是为了给你更多的上下文。当您说“调用 dotenv”时,您的意思是 require("dotenv").config() 吗?
  • 请记住,dotenv 会告诉您“尽早在应用程序中要求并配置 dotenv”,因此请在 app.js 中将该行设为第 1 行,而不是“在 main-config 中添加一行”。在这种情况下也不要试图变得聪明:.env 文件进入你的根目录,app.js 进入你的根目录,app.js 得到require("dotenv").config()。如果其中任何一个都不是这种情况,您必须指示 dotenv 在哪里明确找到它需要加载的 .env 文件,这通常是完全没有必要的。
  • 我在这里看不到任何有问题的东西。将 .env 放在 root 中,并将 app.js 放在 src 中是可以的。你能确认那里叫“.env”
  • 酷,祝你好运

标签: node.js environment-variables dotenv


【解决方案1】:

就我而言,每次我尝试使用 process.env.MY_KEY 从 .env 文件中获取密钥时,它都会返回 undefined。

我被这个问题困扰了两个小时,只是因为我将文件命名为 keys.env 之类的东西,它不被认为是 .env 文件。

所以这里是故障排除列表:

文件名应该是.env(我相信.env.test也可以)。

使用此语句require('dotenv').config(); 确保您在应用程序中尽早要求它

.env 文件应位于项目的根目录中。

遵循DB_HOST=localhost 等“文件写入规则”,无需将值用双引号/单引号括起来。

另外,请查看 NPM 站点上的包文档。

【讨论】:

    【解决方案2】:

    我使用 PM2 运行我的应用程序,我面临的情况与你们完全相同,伙计们。我在尝试打印/使用 .env 文件时收到了undefined

    就我而言,问题是我在“dist”文件夹之外运行pm2 start。例如:我只是打开 Powershell 并运行 pm2 start C:\inetpub\wwwroot\node-apps\my-app\dist\index.js --name my-app

    在谷歌搜索后两个小时后,我意识到自己在做什么......(捂脸) 之前我跑过cd dist_path,然后才跑pm2 start index.js --name=my=app,它就像一个魅力。

    我希望它可以帮助我面临同样问题的人。

    【讨论】:

      【解决方案3】:

      您正在调用require('dotenv').config() 存储.env 文件的根目录上方的两个目录。

      应该是

      main-config.js

      const path = require("path");
      require("dotenv").config({ path: path.join(__dirname, "../../") })
      const viewsFolder = path.join(__dirname, "..", "views");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-25
        • 2020-01-22
        • 2020-03-08
        • 2020-09-28
        • 2019-05-15
        • 1970-01-01
        • 2017-03-13
        • 2020-07-30
        相关资源
        最近更新 更多