Node.js+Express+TypeScript构建API时MySQL连接ENOTFOUND错误求助
getaddrinfo ENOTFOUND 错误排查建议(Node.js/Express/TypeScript+MySQL场景)
核对Express项目与测试脚本的数据库配置
- 确保项目中数据库连接的主机名、端口、用户名、密码和测试脚本完全一致,排查拼写错误(比如主机名多空格、端口号写错)
- 检查环境变量加载逻辑:如果使用dotenv,确认
.env文件路径正确,变量名与代码中读取的一致(比如代码用process.env.DB_HOST,.env里不能写成DB_HOSTNAME) - 在连接代码前打印实际配置:添加
console.log('DB Config:', { host: process.env.DB_HOST, port: process.env.DB_PORT }),对比输出与测试脚本的参数
排查依赖版本与冲突
- 对比两个项目的
mysql2版本:执行npm list mysql2查看版本号,若差异较大,将Express项目的mysql2升级/降级到测试脚本的版本 - 检查重复依赖:执行
npm ls查看是否存在多版本mysql2,必要时删除node_modules和package-lock.json,重新执行npm install
- 对比两个项目的
验证网络与MySQL监听配置
- 测试端口连通性:在Express项目运行机器执行
telnet 127.0.0.1 3306(默认端口),确认能正常连通 - 排查防火墙拦截:暂时关闭防火墙或安全软件,测试是否能连接
- 检查MySQL绑定地址:查看
my.cnf/my.ini中的bind-address配置,确保设置为0.0.0.0或127.0.0.1,而非仅绑定特定IP
- 测试端口连通性:在Express项目运行机器执行
检查Express项目的连接逻辑
- 确认连接时机:排查是否在配置未加载完成时就发起连接(比如异步加载环境变量但未等待完成)
- 核对连接池配置:如果使用连接池,检查
connectionLimit等参数是否合理,对比测试脚本的连接方式(createConnectionvscreatePool) - 逐行对比连接代码:找出测试脚本与Express项目连接逻辑的差异,排查是否有参数遗漏或配置错误
检查TypeScript编译与运行环境
- 验证编译产物:查看
dist目录下的JS文件,确认数据库配置被正确编译,无变量替换错误 - 排查隔离环境问题:如果Express在Docker容器中运行,需用
host.docker.internal代替127.0.0.1访问宿主机MySQL - 检查TS编译选项:确认路径别名等配置未导致配置文件路径错误
- 验证编译产物:查看
内容的提问来源于stack exchange,提问作者user14932992
相关产品推荐
相关产品推荐

