Node.js对接本地MongoDB认证成功数秒后连接断开问题求助
解决方案
修正连接字符串的转义错误
你当前的连接字符串中使用了HTML转义符&代替原生的&,会导致连接参数解析错误,将连接参数部分修改为:mongodb://user:pass@127.0.0.1:27017/Database?retryWrites=true&w=majority确认Mongoose与MongoDB服务版本兼容
首先分别查询本地MongoDB服务版本和项目依赖的Mongoose版本:
# 查MongoDB版本 mongod --version # 查项目内Mongoose版本 npm list mongoose
版本匹配规则参考:Mongoose 7.x及以上不再支持MongoDB 4.0及更早版本,如果你Ubuntu 18.04上安装的是MongoDB 4.0系列,需要降级Mongoose到6.x版本,执行命令:
npm install mongoose@6.12.0
- 新增连接保活配置,避免空闲连接被回收
在Mongoose连接参数中添加超时和保活配置,防止系统或MongoDB服务主动断开长期空闲的连接,修改后的连接代码如下:
const httpsServer = https.createServer(credentials, app); const mongooseConnection = mongoose .createConnection( `mongodb://user:pass@127.0.0.1:27017/Database?retryWrites=true&w=majority`, { useNewUrlParser: true, useUnifiedTopology: true, // 新增保活和超时配置 keepAlive: true, keepAliveInitialDelay: 300000, connectTimeoutMS: 30000, socketTimeoutMS: 360000 } ); mongooseConnection.on('error', console.error.bind(console, 'Connection error: ')); // 新增断开事件监听,便于后续定位问题 mongooseConnection.on('disconnected', () => console.log('MongoDB connection disconnected')); mongooseConnection.on('close', () => console.log('MongoDB connection closed')); mongooseConnection.once('open', () => { console.log("Connected to the DB"); httpsServer.listen(securePort, () => { console.log(`Secure Express server listening on port ${securePort}`); }); });
- 校验账号权限和本地端口限制
- 登录MongoDB Shell,确认使用的账号拥有目标库的完整读写权限
- 执行
ufw status确认Ubuntu防火墙未对本地127.0.0.1的27017端口做访问限制 - 检查
/etc/mongod.conf中bindIp配置确实包含127.0.0.1
内容的提问来源于stack exchange,提问作者Cristian Moroaica
相关产品推荐
相关产品推荐

