如何修复MongooseServerSelectionError: connect ECONNREFUSED 127.0.0.1:27017错误
解决MongooseServerSelectionError: connect ECONNREFUSED 127.0.0.1:27017问题
针对你运行Node.js服务器一段时间后崩溃、无法连接MongoDB的问题,以下是逐步排查和解决方法:
1. 确认MongoDB服务是否持续运行
- 检查MongoDB进程状态:
- Windows:打开命令提示符执行
tasklist | findstr mongod,查看是否有mongod进程 - macOS/Linux:终端执行
ps aux | grep mongod,确认进程存在且未中途退出
- Windows:打开命令提示符执行
- 重启MongoDB服务:
- Windows:打开「服务」面板,找到MongoDB服务右键重启
- macOS:
brew services restart mongodb-community(通过Homebrew安装的情况) - Linux:
sudo systemctl restart mongod
- 查看MongoDB日志(默认路径为
/data/db/mongod.log或配置文件指定路径),检查是否有服务崩溃的原因(比如磁盘空间不足、权限错误)
2. 优化Mongoose连接配置,提升稳定性
确保连接字符串正确,同时添加重连机制避免单次连接失败导致服务器崩溃:
const mongoose = require('mongoose'); const dbURL = 'mongodb://127.0.0.1:27017/your_database_name'; // 替换为你的数据库名 // 配置连接参数 mongoose.connect(dbURL, { useNewUrlParser: true, useUnifiedTopology: true, autoReconnect: true, reconnectTries: Number.MAX_VALUE, // 无限重试 reconnectInterval: 1000 // 每秒重试一次 }); // 监听连接错误 mongoose.connection.on('error', err => { console.error('MongoDB连接异常:', err); }); // 监听断开重连事件 mongoose.connection.on('disconnected', () => { console.log('MongoDB连接断开,正在尝试重连...'); mongoose.connect(dbURL); });
如果是跟随视频学习,对比视频中的连接配置,注意Mongoose版本差异导致的参数变化(比如旧版本的useCreateIndex等参数)
3. 排查端口占用与防火墙限制
- 检查27017端口是否被其他程序占用:
- Windows:
netstat -ano | findstr :27017,若有其他进程占用,通过任务管理器杀掉对应PID的进程 - macOS/Linux:
lsof -i :27017,执行kill -9 <PID>杀掉占用进程
- Windows:
- 临时关闭本地防火墙,测试是否能正常连接,排除防火墙阻止端口的可能
4. 检查MongoDB数据目录权限
- macOS/Linux:确保默认数据目录
/data/db有正确权限,执行sudo chown -R mongodb:mongodb /data/db - Windows:确认MongoDB数据目录(比如
C:\data\db)有读写权限,避免因权限不足导致服务崩溃
如果以上方法仍无效,请补充以下信息以便进一步排查:
- 完整的错误堆栈日志
- 你的Mongoose连接代码片段
- MongoDB和Mongoose的具体版本
- 本地操作系统类型
内容的提问来源于stack exchange,提问作者alexou
相关产品推荐
相关产品推荐

