使用环境变量配置MySQL连接时遭遇ENOTFOUND错误求助
解决NodeJS MySQL CRUD API读取.env变量出现ENOTFOUND错误的问题
核心原因分析
ENOTFOUND错误本质是数据库主机地址解析失败,大概率是环境变量未正确加载或配置值出错导致连接池使用了无效的HOST参数。
排查与修复步骤
1. 确保dotenv正确加载
如果使用ES模块(package.json中配置"type": "module"),避免用动态导入的方式加载dotenv,改用同步加载保证变量提前就绪:
// db.config.js 正确写法 import dotenv from 'dotenv'; dotenv.config(); // 若.env不在根目录,需指定路径:dotenv.config({ path: './config/.env' })
2. 检查.env文件配置
- 确认变量名与代码中读取的名称完全一致,比如代码用
process.env.DB_HOST,.env里就不能写HOST - 避免值末尾带空格或拼写错误,示例正确的.env内容:
DB_HOST=localhost DB_USER=root DB_PASSWORD=your_db_pwd DB_NAME=your_crud_db
3. 验证环境变量读取结果
在db.config.js中添加日志,确认变量是否被正确读取:
console.log('当前DB主机地址:', process.env.DB_HOST); console.log('当前DB用户名:', process.env.DB_USER);
启动服务后查看控制台,如果输出undefined,说明dotenv未加载成功,需检查文件路径或模块加载方式。
4. 修正连接池配置
确保连接池的参数与环境变量一一对应,示例正确的连接池代码:
import mysql from 'mysql2/promise'; const pool = mysql.createPool({ host: process.env.DB_HOST, user: process.env.DB_USER, password: process.env.DB_PASSWORD, database: process.env.DB_NAME, connectionLimit: 10, waitForConnections: true });
额外注意事项
- 确保已安装最新版dotenv:
npm install dotenv --save - 将.env加入.gitignore,避免敏感信息泄露
内容的提问来源于stack exchange,提问作者Dean Forant
相关产品推荐
相关产品推荐

