本地MongoDB环境下Mongoose插入超时错误(insertOne() buffering timed out)如何修复?
解决MongooseError: Operation
collections.insertOne() buffering timed out after 10000ms(本地MongoDB环境) 问题
使用本地MongoDB而非MongoDB Atlas时,遇到错误:
MongooseError: Operation
collections.insertOne()buffering timed out after 10000ms
运行代码如下:
const express = require('express'); const app = express() const mongoose = require('mongoose'); const url = 'mongodb://localhost:27017/testDb' mongoose.connect(url, {useNewUrlParser: true, useUnifiedTopology: true}) .then(() => console.log('DB Connected')) mongoose.connection.on('error', err => { console.log(`DB connection error: ${err.message}`) }); const NewSchema = new mongoose.Schema({ name:String, age:Number }) const newModel = new mongoose.model("collection",NewSchema) const data = newModel({ name:"prajwal", age:30 }) data.save() app.listen(3000,()=>{ console.log("listening to the port 3000") })
原因分析
这个错误核心原因是Mongoose在数据库连接完全建立前就尝试执行数据写入操作,Mongoose会缓冲这些操作,但超过10秒仍未建立连接时就会抛出超时错误。另外也可能是本地MongoDB服务未正常运行导致连接失败。
修复方案
1. 确保连接成功后再执行数据库操作
把数据保存逻辑放到mongoose.connect()的then回调中,或者用async/await确保连接完成:
修改后的代码示例:
const express = require('express'); const app = express() const mongoose = require('mongoose'); const url = 'mongodb://localhost:27017/testDb' mongoose.connect(url, {useNewUrlParser: true, useUnifiedTopology: true}) .then(() => { console.log('DB Connected'); // 连接成功后再执行数据操作 const NewSchema = new mongoose.Schema({ name: String, age: Number }) const newModel = mongoose.model("collection", NewSchema) const data = new newModel({ name: "prajwal", age: 30 }) data.save() .then(() => console.log('Data saved successfully')) .catch(err => console.log('Save error:', err)); }) .catch(err => console.log(`DB connection error: ${err.message}`)); app.listen(3000, () => { console.log("listening to the port 3000") })
2. 检查本地MongoDB服务状态
- 确认本地MongoDB服务(
mongod进程)正在运行,可以通过命令行执行mongod启动服务,或者检查系统服务列表。 - 验证端口
27017未被其他程序占用,确保连接地址mongodb://localhost:27017/testDb正确。
3. 规范模型定义(可选)
Mongoose会自动将模型名称转为复数作为集合名,比如model("collection")对应的集合是collections,如果需要指定集合名可以显式设置:
const newModel = mongoose.model("collection", NewSchema, "collection"); // 第三个参数指定集合名
内容的提问来源于stack exchange,提问作者kick
相关产品推荐
相关产品推荐

