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

使用ThunderClient向MongoDB插入数据时遇Mongoose超时错误求助

解决MongooseError: Operation users.insertOne() buffering timed out after 10000ms错误

这个错误核心是Mongoose在数据库连接未成功建立的情况下尝试执行操作,导致请求缓冲超时,结合你的代码,有以下几个关键问题需要修复:

1. 修复数据库连接的异步逻辑

你的connectToMongo函数没有正确处理Mongoose连接的异步性,服务器可能在数据库连接完成前就启动并接收请求,导致操作无响应。

修改db.js:

const mongoose = require('mongoose')
const mongoURI = "mongodb://localhost:27017/your-db-name"; // 替换为你的目标数据库名称

const connectToMongo = async () => {
    try {
        mongoose.set("strictQuery", false);
        await mongoose.connect(mongoURI);
        console.log("Connected to Mongo Successfully");
    } catch (error) {
        console.error("Failed to connect to Mongo:", error.message);
        process.exit(1); // 连接失败时退出进程,避免无意义运行
    }
}

module.exports = connectToMongo;

同时修改index.js,确保数据库连接成功后再启动服务器:

const connectToMongo = require('./db');
const express = require('express')

const app = express()
const port = 3000

app.use(express.json())

//Available Routes
app.use('/api/auth', require('./routes/auth'))
app.use('/api/auth', require('./routes/notes'))

// 先完成数据库连接,再启动服务
(async () => {
    await connectToMongo();
    app.listen(port, () => {
        console.log(`Example app listening at http://localhost:${port}`)
    })
})();

2. 修正路由的请求方法与异步操作

你用GET请求提交数据不符合REST规范,且GET请求的body通常不会被解析;另外user.save()是异步操作,必须等待执行完成并处理错误。

修改auth.js:

const express = require('express');
const User = require('../models/User');
const router = express.Router()

// 改用POST请求处理数据插入
router.post('/', async (req, res) => {
    try {
        console.log(req.body)
        const user = new User(req.body); // 注意实例化模型需要用new关键字
        await user.save(); // 等待数据保存完成
        res.status(201).send("User created successfully");
    } catch (error) {
        // 捕获并返回错误,比如邮箱重复、字段缺失等
        res.status(400).send({ error: error.message });
    }
})

module.exports = router

3. 修正Schema的字段细节(可选但建议)

你的Schema里存在两个小问题:

  • require拼写错误,应为required
  • 如果想让Mongoose自动生成创建/更新时间,建议使用timestamps选项而非自定义timestamp字段

修改User.js:

const mongoose = require('mongoose');
const { Schema } = mongoose;

const UserSchema = new Schema({
    name: {
        type: String,
        required: true // 修正拼写
    },
    email: {
        type: String,
        required: true,
        unique: true
    },
    password: {
        type: String,
        required: true // 修正拼写
    }
}, { timestamps: true }); // 自动添加createdAt和updatedAt字段

module.exports = mongoose.model('user', UserSchema)

验证步骤

  1. 确保本地MongoDB服务正在运行(可通过MongoDB Compass连接确认)
  2. 在ThunderClient中改用POST请求,地址为http://localhost:3000/api/auth,请求体保持原JSON内容
  3. 查看控制台输出,确认数据库连接成功且用户数据正常插入

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 03:30:46