使用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)
验证步骤
- 确保本地MongoDB服务正在运行(可通过MongoDB Compass连接确认)
- 在ThunderClient中改用
POST请求,地址为http://localhost:3000/api/auth,请求体保持原JSON内容 - 查看控制台输出,确认数据库连接成功且用户数据正常插入
内容的提问来源于stack exchange,提问作者Pratik Chitte
相关产品推荐
相关产品推荐

