You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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连接配置,会触发隐性连接失败
修复步骤

按以下顺序逐一排查处理:

  1. 先验证端口连通性
    登录服务器终端执行端口测试命令:
    telnet cluster0-shard-00-00.cgjma.mongodb.net 27017
    
    如果返回连接拒绝或超时,直接联系o2switch客服申请放开到你MongoDB Atlas集群的27017端口出站权限;如果服务商不给开27017端口,可以把连接字符串里的端口替换为27018,这是Atlas官方兼容的备用端口,多数共享主机不会封禁。
  2. 配置Atlas IP白名单
    在服务器终端执行curl ifconfig.me拿到当前服务器的公网出口IP,进入Atlas集群的网络访问配置页,把该IP添加到白名单。如果临时测试连通性,可以先添加0.0.0.0/0允许所有IP访问,测试通了之后再换成固定IP,生产环境禁止长期开启全网访问权限。
  3. 修正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);
    });
    
  4. 校验账号权限
    如果以上步骤做完还是连接失败,检查你连接字符串里的数据库账号密码是否正确,确认该账号对rank库拥有读写权限。

内容的提问来源于stack exchange,提问作者Antoine Pascual

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 03:45:47