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

MongoDB与Express Post请求报错buffering timed out after 10000ms求助

解决MongoDB + Express Post请求时的insertOne缓冲超时错误

错误信息

{
  "message": "Operation `scales.insertOne()` buffering timed out after 10000ms"
}

问题根源分析

  1. 数据库连接建立后立即关闭:原db.js中connectDB函数的finally块直接调用了client.close(),导致连接刚验证成功就被断开,后续请求无可用连接。
  2. 混用原生MongoClient与Mongoose Schema:代码中同时使用了原生MongoDB客户端和Mongoose模型,但两者未关联,Mongoose的Schema无法获取有效数据库连接。
  3. 路由代码的语法错误:POST路由中存在不必要的await(创建Schema实例是同步操作),以及未定义的saveNewScale变量。

修复步骤

1. 重构数据库连接逻辑(改用Mongoose管理连接)

由于你使用Mongoose Schema来操作数据,直接用Mongoose处理连接更匹配,替换db.js内容:

const mongoose = require('mongoose');
const { endpoint } = require("./config");

async function connectDB() {
  try {
    await mongoose.connect(endpoint, {
      serverApi: {
        version: '1',
        strict: true,
        deprecationErrors: true,
      }
    });
    console.log("Pinged your deployment. You successfully connected to MongoDB!");
  } catch (error) {
    console.error('MongoDB连接失败:', error);
    process.exit(1); // 连接失败时退出进程
  }
}

module.exports = connectDB;

2. 确保Scale模型定义正确(./app/models/Scale.js)

确认模型正确关联Mongoose,示例:

const mongoose = require('mongoose');

const ScaleSchema = new mongoose.Schema({
  name: { type: String, required: true },
  author: String,
  isPreset: Boolean,
  scaleDegrees: Array,
  sustainMode: Boolean,
  startingFreq: Number,
  periodRatio: Number,
});

// 关联到scales集合(Mongoose会自动复数化模型名)
module.exports = mongoose.model('Scale', ScaleSchema);

3. 修复POST路由代码(routeTest.js)

修正语法错误,移除不必要的await,定义正确的保存结果变量:

router.post('/scale', async (req, res) => {
  // 创建Schema实例无需await
  const scaleData = new ScaleSchema({
    name: req.body.name,
    author: req.body.author,
    isPreset: req.body.isPreset,
    scaleDegrees: req.body.scaleDegrees,
    sustainMode: req.body.sustainMode,
    startingFreq: req.body.startingFreq,
    periodRatio: req.body.periodRatio,
  })

  try {
    console.log(scaleData)
    const savedScale = await scaleData.save();
    res.status(200).json(savedScale) // 返回保存后的实际数据
  } catch (error) {
    res.status(400).json({ message: error.message })
  }
})

4. 验证server.js的连接逻辑

确保server.js中连接数据库的代码保持不变,但现在连接会持续保持,不会被关闭:

// 连接数据库
connectDB().catch(console.dir);

验证修复

重启Express服务器后,发送POST请求到/api/scale,数据将正常存入MongoDB的scales集合。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 14:50:05