Mongoose连接MongoDB时出现insertOne缓冲超时错误求助
解决Mongoose操作缓冲超时(Operation
avis.insertOne() buffering timed out)问题 错误原因
你在Mongoose完成MongoDB异步连接前,直接执行了文档保存操作。mongoose.connect()是异步方法,不会立即建立连接,此时调用save()会让操作进入缓冲队列,超过10秒未完成连接就会触发超时错误。
解决方案
- 确认MongoDB服务状态:确保本地MongoDB服务正在运行,端口
27017可正常访问 - 等待连接成功后执行数据库操作:用异步机制(
async/await或Promise.then)确保连接建立后再执行保存 - 启用
strictQuery:适配Mongoose新版本,避免配置警告
修正后的完整代码
const express = require('express') const mongoose = require("mongoose") const app = express() const port = 3000 // 适配Mongoose新版本的配置 mongoose.set('strictQuery', true); // 用async/await处理异步流程 async function initApp() { try { // 等待MongoDB连接成功 await mongoose.connect('mongodb://localhost:27017/test'); console.log("数据库连接成功"); // 定义Schema与Model const aviSchema = new mongoose.Schema({ name: String, awsLink: String }) const Avi = mongoose.model("avi", aviSchema) // 连接成功后创建并保存文档 const newAvi = new Avi({ name: "zahab", awsLink: "aws" }) await newAvi.save(); console.log("文档已成功保存"); // 启动Express服务 app.listen(port, () => { console.log(`服务运行在端口 ${port}`) }) } catch (error) { // 捕获并打印错误信息,方便排查 console.error("数据库操作失败:", error); } } // 初始化应用 initApp(); app.get('/', (req, res) => { res.send('Hello World!') })
关键改动说明
- 用
async/await包裹连接和保存操作,确保执行顺序正确 - 增加错误捕获,能快速定位连接失败(如MongoDB未启动、地址错误)或保存失败的原因
- 将Express服务启动放在连接成功后,避免服务启动但数据库不可用的无效状态
内容的提问来源于stack exchange,提问作者zahab
相关产品推荐
相关产品推荐

