
当 dotenv 文件位于项目根目录,而 JS 文件(如数据库连接模块)位于 src/ 或其他子目录时,需显式指定 .env 文件路径,否则 process.env 变量将为 undefined。
当 dotenv 文件位于项目根目录,而 js 文件(如数据库连接模块)位于 src/ 或其他子目录时,需显式指定 `.env` 文件路径,否则 `process.env` 变量将为 `undefined`。
在 Node.js 项目中,dotenv 默认仅在当前工作目录(即 process.cwd())下查找 .env 文件。若你的 mongoCon.js 位于 src/helper/ 目录,而 .env 文件在项目根目录(与 src 同级),则 require('dotenv').config() 会尝试在 src/helper/ 下搜索 .env——自然失败,导致 process.env.DB_CONN_STRING 返回 undefined。
✅ 正确做法是:显式传入 .env 文件的相对或绝对路径。根据你的目录结构:
/root ├── .env └── /src/helper/mongoCon.js
应在 mongoCon.js 中这样加载:
const { MongoClient, ServerApiVersion } = require('mongodb');
require('dotenv').config({ path: '../../.env' });
const connString = process.env.DB_CONN_STRING;
console.log('DB connection string:', connString); // ✅ 此时将正确输出
// 注意:环境变量名必须严格匹配 .env 中的定义
// .env 中是 DB_CONN_STRING → 代码中必须用 process.env.DB_CONN_STRING
// ❌ 不要写成 process.env.DB_CONNECTION_STRING(名称不一致)
⚠️ 关键注意事项:
变量名一致性:
.env中定义的是DB_CONN_STRING=somestring,代码中必须使用process.env.DB_CONN_STRING—— 原问题中误写为DB_CONNECTION_STRING,这也是返回undefined的常见原因;路径计算基于当前文件位置:
'../../.env'表示从src/helper/上两级回到根目录,再定位.env;-
推荐更健壮的路径写法(可选):使用
path.resolve避免路径错误:const path = require('path'); require('dotenv').config({ path: path.resolve(__dirname, '../../.env') });
? 最佳实践建议:
将 dotenv.config() 统一放在应用入口文件(如 src/index.js 或 server.js)顶部执行一次,并确保其路径指向根目录下的 .env。子模块无需重复调用,直接访问 process.env 即可——既避免路径混乱,也符合 dotenv 官方推荐用法。











