o2switch服务器部署Angular/NodeJS应用时连接MongoDB失败
故障原因
报错connect ECONNREFUSED 15.237.158.132:27017的核心是你部署的o2switch服务器无法和MongoDB Atlas集群的27017端口建立TCP连接,本地能正常连接是因为本地网络没有对应出站限制,90%以上的同类问题都是以下三个原因导致:
- o2switch是共享主机服务商,默认会封禁所有非Web服务端口的出站请求,27017作为MongoDB默认端口,不在默认放行白名单内
- MongoDB Atlas开启了IP白名单校验,你当前服务器的公网出口IP没有被加入白名单,连接直接被Atlas侧拒绝
- 你的mongoose连接代码参数顺序错误,且缺少Atlas强制要求的TLS连接配置,会触发隐性连接失败
修复步骤
按以下顺序逐一排查处理:
- 先验证端口连通性
登录服务器终端执行端口测试命令:
如果返回连接拒绝或超时,直接联系o2switch客服申请放开到你MongoDB Atlas集群的27017端口出站权限;如果服务商不给开27017端口,可以把连接字符串里的端口替换为27018,这是Atlas官方兼容的备用端口,多数共享主机不会封禁。telnet cluster0-shard-00-00.cgjma.mongodb.net 27017 - 配置Atlas IP白名单
在服务器终端执行curl ifconfig.me拿到当前服务器的公网出口IP,进入Atlas集群的网络访问配置页,把该IP添加到白名单。如果临时测试连通性,可以先添加0.0.0.0/0允许所有IP访问,测试通了之后再换成固定IP,生产环境禁止长期开启全网访问权限。 - 修正mongoose连接逻辑
你现有代码把配置项和回调函数的位置写反了,且缺少TLS连接配置,修正后的代码如下:mongoose.connect( config.DB_URI, { useNewUrlParser: true, useUnifiedTopology: true, ssl: true, sslValidate: true }, (err) => { if (err) { console.error('数据库连接失败:', err.message); process.exit(1); } console.log('数据库连接成功'); } ); // 补充全局异常捕获,消除UnhandledPromiseRejection警告 process.on('unhandledRejection', err => { console.error('未处理的异步异常:', err); }); - 校验账号权限
如果以上步骤做完还是连接失败,检查你连接字符串里的数据库账号密码是否正确,确认该账号对rank库拥有读写权限。
内容的提问来源于stack exchange,提问作者Antoine Pascual
相关产品推荐
相关产品推荐

