Express服务器无法连接MongoDB问题求助
Express连接MongoDB失败:ECONNREFUSED ::1:27017 解决方法
核心问题定位
报错信息里的connect ECONNREFUSED ::1:27017表明你的Node.js程序尝试通过IPv6地址::1连接MongoDB,但你的MongoDB服务大概率只监听了IPv4的127.0.0.1,或者系统的localhost解析优先走IPv6,导致连接被拒绝。而Mongo Compass能正常连接,是因为Compass默认使用IPv4地址或你的MongoDB配置允许IPv4连接。
快速修复方案
方案1:强制使用IPv4地址连接
将连接字符串中的localhost替换为127.0.0.1,强制程序通过IPv4连接MongoDB:
const connectionStringURI = `mongodb://127.0.0.1:27017`;
方案2:修改MongoDB配置支持多地址监听
如果需要MongoDB同时支持IPv4和IPv6连接,修改MongoDB配置文件(如mongod.cfg),将net.bindIp设置为0.0.0.0(监听所有IPv4地址)或::,0.0.0.0(同时监听IPv6和IPv4):
net: bindIp: 0.0.0.0 port: 27017
修改完成后重启MongoDB服务即可。
代码优化建议
原代码缺少错误处理逻辑,即使连接失败仍会启动服务器,建议添加错误捕获,并改用更易维护的async/await写法:
const express = require("express"); const { MongoClient } = require("mongodb"); const app = express(); const port = 3001; const connectionStringURI = `mongodb://127.0.0.1:27017`; let db; async function connectToDB() { try { const client = await MongoClient.connect(connectionStringURI, { useNewUrlParser: true, useUnifiedTopology: true, }); db = client.db("你的数据库名称"); // 建议显式指定数据库名,避免默认连接test库 console.log("MongoDB连接成功"); // 连接成功后再启动服务器 app.listen(port, () => { console.log(`App listening at http://localhost:${port}`); }); } catch (err) { console.error("MongoDB连接失败:", err); process.exit(1); // 连接失败时退出进程,避免无效服务运行 } } connectToDB();
验证步骤
- 若修改了MongoDB配置,重启MongoDB服务
- 运行修改后的代码,查看控制台是否输出「MongoDB连接成功」
- 若问题仍存在,检查MongoDB端口监听状态:
- Windows命令提示符执行:
netstat -ano | findstr :27017 - 确认输出中存在
0.0.0.0:27017或127.0.0.1:27017的监听记录
- Windows命令提示符执行:
内容的提问来源于stack exchange,提问作者Liam Allen
相关产品推荐
相关产品推荐

