Node.js DOTENV Windows环境变量,但未显示其他变量
我正在使用Node,在电脑上安装了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()
dotenv
,并在.env文件中存储了一个虚拟环境变量(API_KEY=43783283287)
还考虑以下文件的路径(如果有帮助):
- app.js存储在bloccit/src/app.js中
- .env存储在bloccit/.env中
- main-config.js存储在bloccit\src\config\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