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

MongoDB连接频繁失败求助:已排除服务未启动情况

MongoDB连接超时问题排查与解决

问题描述

MongoDB服务确认运行正常,但使用Mongoose连接时仍频繁出现超时错误:

Failed to connect to MongoDB: MongooseServerSelectionError: connection timed out

连接代码如下:

const mongoose = require("mongoose");

const connectDB = async () => {
  try {
    const dbURI = "mongodb://localhost:27017/xPay";

    await mongoose.connect(dbURI);

    const db = mongoose.connection;

    db.on("error", (error) => {
      console.error("MongoDB connection error:", error);
    });

    db.once("open", () => {
      console.log("MongoDB connected successfully");
    });
  } catch (error) {
    console.error("Failed to connect to MongoDB:", error);
    process.exit(1); // Exit the process with failure
  }
};

module.exports = connectDB;

解决方案

1. 替换localhost为127.0.0.1

部分环境下localhost的DNS解析可能出现异常,直接使用回环IP地址尝试连接:

const dbURI = "mongodb://127.0.0.1:27017/xPay";

2. 添加连接超时与重试配置

给Mongoose连接增加超时时间和重试参数,避免因短暂网络波动导致连接失败:

await mongoose.connect(dbURI, {
  serverSelectionTimeoutMS: 5000, // 5秒超时
  retryWrites: true,
  keepAlive: true,
  keepAliveInitialDelay: 300000
});

3. 调整MongoDB绑定IP配置

检查MongoDB的配置文件(Windows为mongod.cfg,Linux为/etc/mongod.conf),确保bindIp设置允许本地连接:

net:
  port: 27017
  bindIp: 127.0.0.1  # 若需要允许外部连接可改为0.0.0.0,但本地连接保持127.0.0.1即可

修改后重启MongoDB服务。

4. 检查防火墙/安全软件拦截

Windows防火墙或第三方安全软件可能拦截了27017端口,需将MongoDB进程或27017端口加入白名单:

  • Windows:打开「Windows Defender防火墙」→「高级设置」→「入站规则」,新建允许27017端口的规则
  • Linux:执行sudo ufw allow 27017开放端口

5. 验证MongoDB端口监听状态

通过命令确认MongoDB是否在监听27017端口:

  • Windows:netstat -ano | findstr :27017,查看是否有mongod.exe进程对应的PID
  • Linux:lsof -i :27017或ss -tulpn | grep 27017,确认mongod进程在监听端口

6. 调整事件监听位置

当前代码在mongoose.connect()之后才绑定连接事件,可能错过连接过程中的错误提示,建议提前绑定:

const connectDB = async () => {
  try {
    const dbURI = "mongodb://127.0.0.1:27017/xPay";
    const db = mongoose.connection;

    // 提前绑定事件
    db.on("error", (error) => {
      console.error("MongoDB connection error:", error);
    });

    db.once("open", () => {
      console.log("MongoDB connected successfully");
    });

    await mongoose.connect(dbURI, {
      serverSelectionTimeoutMS: 5000
    });
  } catch (error) {
    console.error("Failed to connect to MongoDB:", error);
    process.exit(1);
  }
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 08:50:57