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

使用Mongoose连接MongoDB遭遇buffering timed out错误求助

解决Mongoose连接MongoDB时的buffering timed out错误

嘿,太懂被同一个bug缠一周的崩溃感了!你的问题根源在于Mongoose的连接是异步操作,但你没等连接完成就直接执行了数据库写入,导致操作被缓冲后超时。咱们一步步来搞定它:

问题分析

你代码里的mongoose.connect()是异步的,它不会立刻完成连接。你紧接着就执行db.save(),这时候Mongoose还没连上MongoDB,只能把这个保存操作“缓冲”起来。如果连接迟迟没建立(或者数据库根本没启动),就会触发buffering timed out错误。另外,你那句console.log("Connected")其实是假的——它在连接开始前就打印了,根本不能说明连接成功。

修复方案

1. 等待连接完成后再执行数据库操作

用async/await或者.then()来处理异步连接,确保连接成功后再做数据保存:

用async/await的版本(更直观)

const mongoose = require("mongoose");
mongoose.set('strictQuery', true);

// 用async函数包裹所有数据库操作逻辑
async function main() {
  try {
    // 等待连接成功
    await mongoose.connect("mongodb://localhost:27017/newDB", { 
      useNewUrlParser: true,  
      useUnifiedTopology: true 
    });
    console.log("真的连接上MongoDB了!");

    // 定义Schema和Model
    const DBSchema = new mongoose.Schema({ name: String, anything: String });
    const DaB = mongoose.model("Working", DBSchema);

    // 创建并保存文档
    const db = new DaB({ name: "user", anything: "Some text" });
    await db.save();
    console.log("数据保存成功!");
  } catch (err) {
    // 捕获所有错误,方便排查问题
    console.error("出错了:", err);
  }
}

// 执行主函数
main();

用.then()的版本(适合偏好链式调用的场景)

const mongoose = require("mongoose");
mongoose.set('strictQuery', true);

mongoose.connect("mongodb://localhost:27017/newDB", { 
  useNewUrlParser: true,  
  useUnifiedTopology: true 
})
.then(() => {
  console.log("真的连接上MongoDB了!");
  
  const DBSchema = new mongoose.Schema({ name: String, anything: String });
  const DaB = mongoose.model("Working", DBSchema);

  const db = new DaB({ name: "user", anything: "Some text" });
  return db.save();
})
.then(() => {
  console.log("数据保存成功!");
})
.catch(err => {
  console.error("出错了:", err);
});

2. 检查MongoDB服务状态

如果修改后还是报错,先确认你的本地MongoDB服务是否在运行:

  • Windows:打开系统服务列表,找到MongoDB Server,确保它处于运行状态
  • Mac/Linux:终端执行mongod启动服务(如果配置了系统服务,用systemctl start mongod)
  • 确认端口27017没有被其他程序占用

3. 关闭Mongoose的缓冲区(可选)

如果你不想让Mongoose缓冲未连接时的操作,可以关闭这个功能,这样能立刻得到错误提示,方便快速排查:

mongoose.set('bufferCommands', false);

为什么原来的代码会失败?

mongoose.connect()是异步操作,它会在后台尝试连接数据库,但你的代码没有等待这个过程完成就直接执行了db.save()。Mongoose默认会缓冲这些操作,但如果连接超时(比如数据库没启动),就会抛出buffering timed out错误。那句console.log("Connected")只是在连接请求发送后就打印了,完全不能代表连接成功。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 17:25:24