Mongoose连接MongoDB出现ECONNREFUSED及无效消息大小错误如何解决
问题排查与解决方案
第一个报错:MongooseServerSelectionError: connect ECONNREFUSED ::1:27017
原因
Windows系统默认将localhost优先解析为IPv6地址::1,但本地MongoDB服务默认仅监听IPv4的127.0.0.1地址,导致连接请求被拒绝。
临时解决方法
直接将连接地址中的localhost替换为IPv4地址127.0.0.1即可,修改后代码如下:
const mongoose = require('mongoose'); mongoose.connect('mongodb://127.0.0.1:27017/notes-db-app',{ useNewUrlParser: true, useUnifiedTopology: true }) .then(db => console.log('DB is connected')) .catch(err => console.log(err));
永久解决方法(可选)
如果需要保留localhost写法,可修改MongoDB配置文件mongod.cfg,找到net配置段的bindIp项,添加IPv6地址::1,修改后如下:
net: port: 27017 bindIp: 127.0.0.1,::1
修改完成后重启MongoDB服务即可生效。
第二个报错:MongooseServerSelectionError: Invalid message size: 1347703880, max allowed: 67108864
原因
错误日志明确显示当前Mongoose尝试连接的地址为localhost:3000,3000是Node.js Web服务的常用默认端口,而非MongoDB的服务端口。该错误码1347703880转成ASCII对应字符HTTP,说明MongoDB协议请求发到了HTTP服务上,返回的响应不符合MongoDB报文格式,所以抛出报文大小异常。
解决方法
- 确认代码中是否有其他配置覆盖了MongoDB连接地址,修正连接端口为MongoDB实际监听的端口(默认27017)
- 检查启动脚本、环境变量配置,确认没有误将MongoDB端口设置为Web服务的3000端口
- 进入MongoDB的bin目录执行
mongo命令,确认MongoDB服务正常运行且监听端口为27017
通用排查步骤
如果修改后仍无法连接,可按以下步骤确认:
- 执行
netstat -ano | findstr "27017",检查27017端口是否有进程监听,对应PID是否为MongoDB进程 - 执行
mongo --host 127.0.0.1 --port 27017,测试本地能否直接连接MongoDB服务 - 检查本地防火墙是否拦截了27017端口的本地连接请求
内容的提问来源于stack exchange,提问作者InthraDev
相关产品推荐
相关产品推荐

