Node.js DOTENV Windows环境变量,但未显示其他变量

Node.js DOTENV Windows环境变量,但未显示其他变量,node.js,environment-variables,dotenv,Node.js,Environment Variables,Dotenv,我正在使用Node,在电脑上安装了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()

我正在使用Node,在电脑上安装了
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:

问题:当我运行app.js文件(其中包括
console.log(process.env)
)时,我会得到一个所有windows环境变量的列表(请参阅下面的图片),但在列表中看不到我的API_键

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

我做错了什么


在我的例子中,每次我尝试使用process.env.my_key从.env文件中获取密钥时,它都返回未定义

这个问题困扰了我两个小时,只是因为我把这个文件命名为keys.env,它不被认为是.env文件

下面是故障排除列表:

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

使用以下语句
require('dotenv').config(),确保您在应用程序中尽早需要它

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

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


另外,请查看NPM网站上的软件包文档。

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

在我的例子中,问题是我运行的
pm2 start
在'dist'文件夹之外。例如:我只需打开Powershell并运行
pm2 start C:\inetpub\wwwroot\node apps\my app\dist\index.js——命名我的app

在谷歌搜索了两个小时后,我意识到我在做什么。。。(脸掌) 以前我曾经运行过
cd dist_path
,直到那时才运行了
pm2 start index.js--name=my=app
,它就像一个魔咒


我希望它能帮助我的用户解决同样的问题。

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

应该是

main-config.js

const path=require(“路径”);
require(“dotenv”).config({path:path.join(\uu dirname,“../”)})
const viewsFolder=path.join(uu dirname,“…”,“views”);

首先,您没有显示实际调用dotenv的代码。因为它不会向process.env添加任何内容,除非您实际加载它。嗨@Mike'Pomax'Kamermans,我包含上面的代码是为了给您提供更多的上下文。当你说“调用dotenv”时,你的意思是
require(“dotenv”).config()
?记住dotenv告诉你“尽早在应用程序中,要求并配置dotenv”,所以在app.js中设置第1行,而不是“主配置中的一行”。在这种情况下也不要太聪明:
.env
文件进入根目录,
app.js
进入根目录,app.js获取
require(“dotenv”).config()
。如果以上任何情况都不是这样,您必须指示dotenv在何处显式查找它需要加载的
.env
文件,这通常是完全不必要的。我在这里看不到任何问题。将.env放在根目录下,将app.js放在src中是可以的。你能确认有一个叫做“.env”的酷,祝你好运
API_KEY=43783283287