Node.js后端连接MySQL数据库出现ECONNREFUSED错误,无法获取user表数据求助
排查数据库连接拒绝(ECONNREFUSED)问题及接口数据无法返回的解决方案
从你贴的终端错误日志里,核心问题很明确:
Error en db: Error: connect ECONNREFUSED 127.0.0.1:8889
这个错误说明你的后端代码尝试连接localhost:8889的MySQL服务时被拒绝了,这也是http://localhost:3000/user接口无法返回数据的根本原因——后端连不上数据库,自然查不到数据。下面是一步步的排查和修复步骤:
1. 先确认MySQL服务是否在运行,且监听8889端口
- Windows系统:
打开命令提示符,执行:
如果没有任何输出,说明没有进程在监听这个端口,你需要启动MySQL服务。可以通过「服务」面板(按下Win+R,输入netstat -ano | findstr :8889services.msc)找到MySQL相关服务,右键启动它。 - Mac/Linux系统:
打开终端执行:
同样,没有输出的话就启动MySQL服务,比如Mac上用Homebrew安装的话可以执行lsof -i :8889 # 或者 netstat -tulpn | grep 8889brew services start mysql,Linux用sudo systemctl start mysql。
2. 核对MySQL的实际端口是否是8889
很多默认安装的MySQL用的是3306端口,只有部分工具(比如MAMP)会默认用8889。你可以:
- 查看MySQL的配置文件(Windows是
my.ini,Mac/Linux是my.cnf),找到port参数确认端口号; - 或者用MySQL客户端(比如MySQL Workbench、Navicat)尝试连接,看连接成功时用的端口是多少;
- 如果实际端口不是8889,修改
connection.js里的port值,比如改成3306:const mysqlConnection = mysql.createConnection({ host: 'localhost', user: 'root', password: '', database: 'project', port: '3306' // 改成你的实际端口 });
3. 验证数据库账号密码的正确性
你的代码里用的是user: 'root'、password: '',需要确认:
- 你的MySQL root账号是否允许空密码登录;
- 该账号是否允许从
localhost(本地)连接。
可以直接用MySQL客户端尝试用同样的账号、密码、端口连接project数据库,如果连不上,要么修改root账号的密码,要么调整账号的连接权限(比如执行GRANT ALL ON project.* TO 'root'@'localhost' IDENTIFIED BY '你的密码';)。
4. 确认project数据库和user表存在
等数据库连接成功后,还要确保你创建的project数据库和user表确实存在。可以登录MySQL后执行:
USE project; SHOW TABLES;
如果看不到user表,需要重新创建它。
最后测试
当你完成以上排查修复后,重新执行npm run serve,如果终端输出Db ok,说明数据库连接成功了,这时候再访问http://localhost:3000/user,应该就能拿到user表里的数据了。
内容的提问来源于stack exchange,提问作者lemoine
相关产品推荐
相关产品推荐

