Node.js非根目录下Dotenv环境变量获取为undefined问题
问题分析与解决办法
核心问题有两个:
- 环境变量路径未指定:
dotenv默认会从当前执行的脚本所在目录加载.env文件,你的mongoCon.js放在src/helper目录下,它会去该目录找.env,而你的.env在项目根目录,所以加载失败。 - 变量名不匹配:你的
.env里是DB_CONN_STRING,但代码里读取的是DB_CONNECTION_STRING,名字不一致,即使路径正确也会返回undefined。
解决步骤:
第一步:修正变量名匹配
把代码里的变量名改成和 .env 一致:
const connString = process.env.DB_CONN_STRING;
或者把 .env 里的变量名改成 DB_CONNECTION_STRING,二选一即可。
第二步:指定 .env 文件路径
在 mongoCon.js 里引入 path 模块,明确指定根目录的 .env 文件路径,有两种写法:
写法一:基于当前文件路径向上查找
const { MongoClient, ServerApiVersion } = require('mongodb'); const path = require('path'); require('dotenv').config({ path: path.resolve(__dirname, '../../.env') }); const connString = process.env.DB_CONN_STRING; console.log(connString);
__dirname表示当前文件(mongoCon.js)所在的绝对路径,../../表示向上退两级目录,刚好到项目根目录。
写法二:基于项目根目录(推荐)
const { MongoClient, ServerApiVersion } = require('mongodb'); const path = require('path'); require('dotenv').config({ path: path.join(process.cwd(), '.env') }); const connString = process.env.DB_CONN_STRING; console.log(connString);
process.cwd()是你执行node命令时所在的目录(也就是项目根目录),不管脚本放在哪里,只要从根目录启动项目,这个路径就不会错。
内容的提问来源于stack exchange,提问作者Eric Naiber
相关产品推荐
相关产品推荐

