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

如何解决Mongoose 6.0.3出现buffering timed out after 10000ms错误

问题原因

这个报错是Mongoose 6.x版本的不兼容改动导致的,核心原因两点:一是你沿用的Mongoose 5.x的连接写法不符合6.x规范,连接没有正确初始化;二是数据库操作在连接成功前就触发,触发了操作缓存超时。

解决方案
  • 修正连接代码适配Mongoose 6.x规范
    Mongoose 6.x开始mongoose.connect()完全返回Promise,不再支持传入回调函数参数,原来的回调不会正确触发,也无法捕获连接异常。同时6.x默认已经开启useNewUrlParser、useUnifiedTopology、useFindAndModify: false配置,不需要手动传入,冗余传参可能引发冲突。修改后的连接代码如下:
const connectDB = async () => {
  try {
    await mongoose.connect(process.env.DB_URI, {
      keepAlive: true,
      // 可适当拉长超时时间适配Atlas免费版的网络延迟
      serverSelectionTimeoutMS: 30000,
      socketTimeoutMS: 45000
    })
    console.log('connected to MongoDB')
  } catch (error) {
    console.error('MongoDB连接失败:', error)
    process.exit(1)
  }
}

// 必须等待连接成功后再启动业务逻辑、监听端口
connectDB().then(() => {
  // 此处放入你的服务启动代码,比如app.listen(3000)
})
  • 调整数据库操作执行时机
    你现在的报错说明在Mongoose还未和Atlas建立连接时,就已经调用了findOne、save等数据库操作,Mongoose默认会将操作缓存10秒,超时未连接就抛出该错误。所有数据库操作必须放在连接成功的回调之后执行,不要让连接逻辑和业务操作并行执行。
  • 验证Atlas与网络配置
  1. 确认process.env.DB_URI的用户名、密码、目标数据库名填写正确,密码中的特殊字符需要做URL编码
  2. 确认Atlas控制台的IP白名单已经添加当前运行代码的机器公网IP,测试阶段可临时设置为0.0.0.0/0排除白名单问题(生产环境不要使用该配置)
  3. 检查本地防火墙、代理是否拦截了27015-27017端口的出站请求
  • 版本兼容验证
    如果以上操作都无效,可以先降级到Mongoose 5.x最新稳定版确认问题是否消失,Mongoose 6.0.3属于6.0早期版本,存在已知的Atlas连接兼容性bug,也可以升级到Mongoose 6.x最新稳定版修复已知问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 03:36:04