You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 16:33:21