Node.js导出mysql2连接池后.env变量未定义致连接失败
排查MySQL连接池环境变量加载失败问题
1. 确认.env文件的加载路径与时机
因为database.js在config目录下,默认调用dotenv.config()会读取当前目录(config)下的.env,而非项目根目录的文件。需要手动指定路径:
const path = require('path'); require('dotenv').config({ path: path.resolve(__dirname, '../.env') });
注意:这段加载代码必须放在创建连接池的代码之前,确保环境变量先被读取。
2. 检查.env文件的格式正确性
- 变量名和值不能有多余空格,比如
DB_USER = root会导致变量值包含空格,应写成DB_USER=root - 变量值不需要加引号(除非值本身包含空格或特殊字符),比如
DB_PASSWORD="my-pass"可以改成DB_PASSWORD=my-pass - 确保变量名与
database.js中引用的完全一致(大小写敏感),比如代码用process.env.DB_USER,.env里就必须是DB_USER
示例正确的.env内容:
DB_HOST=localhost DB_USER=your_db_user DB_PASSWORD=your_db_pass DB_NAME=your_db_name
3. 验证环境变量是否成功加载
在database.js创建连接池之前,添加打印语句验证变量是否被读取:
console.log('当前DB_USER:', process.env.DB_USER); console.log('当前DB_PASSWORD:', process.env.DB_PASSWORD);
如果输出undefined,说明.env文件未正确加载,回到第一步检查路径和加载顺序。
4. 确认模块导入顺序
如果项目入口文件先加载user.service.js,再加载database.js,会导致创建连接池时环境变量还未被读取。要保证入口文件(比如app.js)先加载database.js或先执行环境变量加载逻辑,再加载业务模块。
5. 检查dotenv的安装与版本
- 确保已安装dotenv:
npm install dotenv - 若使用旧版本dotenv可能存在路径解析问题,尝试更新到最新版:
npm update dotenv
内容的提问来源于stack exchange,提问作者Amelia
相关产品推荐
相关产品推荐

