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

连接MongoDB Atlas Cloud时App.js出现items.find()超时错误

解决MongoDB Atlas连接时items.find()超时问题

问题分析

你遇到的Operation items.find() buffering timed out after 10000ms错误,结合本地MongoDB正常的表现,核心原因集中在以下几点:

  • 连接URI格式错误,数据库路径位置不符合规范
  • 客户端连接后被立即关闭,后续查询无可用连接
  • MongoDB Atlas的IP白名单未配置,服务器拒绝外部连接

修复步骤

1. 修正MongoDB URI格式

你的URI把数据库名/todolistDB放在了查询参数后面,这不符合MongoDB连接字符串规范。正确格式需将数据库名放在mongodb.net/之后、查询参数之前:

const uri =
  "mongodb+srv://****:****@cluster0.tzmxqm3.mongodb.net/todolistDB?retryWrites=true&w=majority";

2. 调整客户端生命周期,避免提前关闭

原代码在连接成功后,finally块会立即关闭客户端,导致后续执行items.find()时没有可用连接。需将查询逻辑放在连接后的代码块中,仅在所有操作完成后关闭客户端:

//jshint esversion:6
const { MongoClient, ServerApiVersion } = require('mongodb');

const uri =
  "mongodb+srv://****:****@cluster0.tzmxqm3.mongodb.net/todolistDB?retryWrites=true&w=majority";

const client = new MongoClient(uri, {
  useNewUrlParser: true,
  useUnifiedTopology: true,
  serverApi: ServerApiVersion.v1,
});

async function run() {
  let clientConnected = false;
  try {
    // 建立连接
    await client.connect();
    clientConnected = true;
    console.log("connected to Atlas");

    // 执行查询操作(示例)
    const db = client.db('todolistDB');
    const items = db.collection('items');
    const result = await items.find({}).toArray();
    console.log(result);

  } catch (e) {
    console.error("操作出错:", e);
  } finally {
    // 仅在连接成功的情况下关闭客户端
    if (clientConnected) {
      await client.close();
      console.log("客户端已关闭");
    }
  }
}
run().catch(console.dir);

3. 配置MongoDB Atlas IP白名单

登录MongoDB Atlas控制台操作:

  • 进入目标集群页面,点击左侧Network Access
  • 在IP Access List中添加当前设备的公网IP,测试阶段可临时添加0.0.0.0/0(生产环境禁止此操作)
  • 保存配置后等待几分钟,让规则生效

4. 验证数据库用户权限

确保你的Atlas数据库用户拥有todolistDB的读写权限:

  • 进入Database Access页面
  • 检查对应用户的权限配置,确保包含readWrite权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 19:42:58