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

Mongoose连接本地MongoDB超时求助:insertOne缓冲超时10000ms

问题原因与解决方法

原因分析

你的代码中,数据库连接是异步操作,但调用user.save()时Mongoose还未完成与MongoDB的连接。Mongoose会将未完成连接时的操作放入缓冲队列,等待连接成功后执行,但如果连接耗时超过默认10秒的缓冲超时时间,就会抛出buffering timed out错误。

另外,你使用的mongoose.connect回调写法不会阻塞后续代码执行,导致插入操作先于连接完成触发,再加上本地连接可能因MongoDB服务启动慢、本地资源占用等问题延迟,直接触发了超时。

解决方法

以下几种方式可确保连接完成后再执行数据库操作:

方法1:使用async/await(推荐)

将连接逻辑封装在异步函数中,等待连接成功后再执行插入:

// script.js
const mongoose = require('mongoose')
const User = require("./User")

async function main() {
  try {
    await mongoose.connect("mongodb://localhost/bh_db");
    console.log("mongoose has been connected");
    
    // 连接成功后创建并保存用户
    const user = new User({name:"Kyle", age: 26});
    await user.save();
    console.log("User Saved");
  } catch (err) {
    console.error(err);
  }
}

main();

方法2:监听Mongoose的connected事件

通过事件监听确保连接完成后执行操作:

// script.js
const mongoose = require('mongoose')
const User = require("./User")

mongoose.connect("mongodb://localhost/bh_db")
  .catch(err => console.error(err));

// 监听连接成功事件
mongoose.connection.on('connected', () => {
  console.log("mongoose has been connected");
  const user = new User({name:"Kyle", age: 26});
  user.save().then(() => console.log("User Saved"));
});

方法3:使用Promise链式调用

利用mongoose.connect返回的Promise,在连接成功后执行插入:

// script.js
const mongoose = require('mongoose')
const User = require("./User")

mongoose.connect("mongodb://localhost/bh_db")
  .then(() => {
    console.log("mongoose has been connected");
    const user = new User({name:"Kyle", age: 26});
    return user.save();
  })
  .then(() => console.log("User Saved"))
  .catch(err => console.error(err));

如果本地连接确实偏慢,可临时调整缓冲超时时间(不推荐作为核心解决方案):

mongoose.connect("mongodb://localhost/bh_db", {
  bufferTimeoutMS: 30000 // 改为30秒超时
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 13:31:13