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

Node.js使用Mongoose操作MongoDB遭遇缓冲超时错误求解决方案

使用Mongoose连接MongoDB插入数据报错的解决方案

问题重现

尝试用Node.js + Mongoose操作本地MongoDB 5.0.9,执行插入数据时报错MongooseError: Operation veges.insertOne() buffering timed out after 10000ms,原代码如下:

const mongoose = require('mongoose');

mongoose.connect('mongodb://localhost:27017/vegesDB', {
  useNewUrlParser: true
});

const vegeSchema = new mongoose.Schema({
  name: String,
  rating: Number,
  review: String
});

const Vege = mongoose.model("Vege", vegeSchema);

const vege = new Vege({
  name: "Potato",
  rating: 9,
  review: "Very versatile vegetable"
});

vege.save();
mongoose.connection.close();

错误信息:

C:\Users\85569\Desktop\Neptune Pluto\FruitsProject\node_modules\mongoose\lib\drivers\node-mongodb-native\collection.js:153
          const err = new MongooseError(message);
                      ^

MongooseError: Operation `veges.insertOne()` buffering timed out after 10000ms
    at Timeout.<anonymous> (C:\Users\85569\Desktop\Neptune Pluto\FruitsProject\node_modules\mongoose\lib\drivers\node-mongodb-native\collection.js:153:23)
    at listOnTimeout (node:internal/timers:564:17)
    at process.processTimers (node:internal/timers:507:7)

Node.js v18.6.0

问题原因

  1. 异步操作未正确等待:mongoose.connect是异步操作,代码直接同步执行vege.save()和mongoose.connection.close()时,MongoDB连接还未建立完成,导致插入操作处于缓冲状态最终超时。
  2. 过时配置与缺失错误处理:useNewUrlParser在Mongoose 6.x及以上版本已默认启用,无需手动配置;原代码未捕获连接和操作的错误,无法及时排查问题。

解决方案

正确代码示例(使用async/await)

const mongoose = require('mongoose');

// 封装异步函数处理数据库操作
async function run() {
  try {
    // 连接MongoDB,新版Mongoose无需手动指定useNewUrlParser等选项
    await mongoose.connect('mongodb://localhost:27017/vegesDB');
    console.log('成功连接到MongoDB');

    // 定义Schema和Model
    const vegeSchema = new mongoose.Schema({
      name: String,
      rating: Number,
      review: String
    });

    const Vege = mongoose.model("Vege", vegeSchema);

    // 创建并保存文档
    const vege = new Vege({
      name: "Potato",
      rating: 9,
      review: "Very versatile vegetable"
    });
    await vege.save();
    console.log('数据插入成功');

  } catch (err) {
    // 捕获并打印所有错误
    console.error('操作失败:', err);
  } finally {
    // 无论操作成功或失败,最后关闭连接
    await mongoose.connection.close();
    console.log('数据库连接已关闭');
  }
}

// 执行函数
run();

关键注意点

  • 等待连接建立:必须用await等待mongoose.connect()完成,确保连接成功后再执行后续数据库操作。
  • 等待异步操作完成:vege.save()是异步操作,需用await等待其执行完成,避免提前关闭连接。
  • 错误捕获:用try/catch捕获连接和操作过程中的所有错误,便于排查问题。
  • 新版Mongoose配置:Mongoose 6.x及以上版本已默认启用useNewUrlParser、useUnifiedTopology等选项,无需手动配置;若使用旧版本,可添加{ useNewUrlParser: true, useUnifiedTopology: true }确保兼容性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 11:33:49