
当 dotenv 配置文件(.env)位于项目根目录,而 javascript 文件(如 src/helper/mongocon.js)位于深层子目录时,dotenv 默认无法自动定位到 .env 文件,导致 process.env 变量为 undefined;需显式指定 path 选项才能正确加载。
当 dotenv 配置文件(.env)位于项目根目录,而 javascript 文件(如 src/helper/mongocon.js)位于深层子目录时,dotenv 默认无法自动定位到 .env 文件,导致 process.env 变量为 undefined;需显式指定 path 选项才能正确加载。
在 Node.js 项目中,dotenv 模块默认仅在当前工作目录(process.cwd())下查找 .env 文件,而非从被 require 的 JS 文件所在路径出发搜索。因此,当 mongoCon.js 位于 src/helper/ 目录下时,若直接调用 require('dotenv').config(),它会尝试在 src/helper/.env 中读取配置,而非项目根目录的 .env——这正是 process.env.DB_CONN_STRING 返回 undefined 的根本原因。
✅ 正确做法是:显式传入 path 选项,指向根目录下的 .env 文件。修改 mongoCon.js 中的 dotenv 加载方式如下:
const { MongoClient, ServerApiVersion } = require('mongodb');
// ✅ 显式指定 .env 文件路径(相对于当前文件)
require('dotenv').config({ path: '../../.env' });
const connString = process.env.DB_CONN_STRING;
console.log('Database connection string:', connString); // 现在将正确输出值
// 注意:你的 .env 中定义的是 DB_CONN_STRING,但代码中读取的是 DB_CONNECTION_STRING
// → 请确保键名严格一致!⚠️ 关键注意事项:
-
环境变量名必须完全匹配:
.env中写的是DB_CONN_STRING=somestring,则代码中必须使用process.env.DB_CONN_STRING(而非DB_CONNECTION_STRING),否则仍为undefined。 -
路径是相对于当前 JS 文件位置计算的:
'../../.env'表示从src/helper/mongoCon.js向上两级(即回到root/),再找.env文件。 -
推荐统一在应用入口处加载 dotenv:更健壮的做法是在
src/index.js或server.js(项目启动文件)中一次性执行require('dotenv').config({ path: '.env' }),避免在多个子模块中重复配置,也防止路径错乱。子模块可直接安全访问process.env。 - 若使用 ES 模块(
.mjs或type: "module"),需改用动态import()或借助dotenv/config命令行方式,因require()不可用。
总结:dotenv 不具备跨目录自动发现能力,路径意识(path awareness)必须由开发者显式提供。只要确保 config({ path: '...' }) 的路径正确且环境变量键名拼写一致,即可在任意深度的子目录中可靠读取根目录的环境变量。


















