求助:Mongoose操作fruits.insertOne()缓冲超时10000ms问题
解决MongooseError: Operation
fruits.insertOne() buffering timed out after 10000ms问题 这个超时错误的核心原因是:Mongoose尚未成功建立数据库连接,就尝试执行数据写入操作。你的代码存在几处逻辑问题,导致连接流程异常,进而触发缓冲超时。
代码中的问题分析
- 冗余依赖:同时引入
mongoose和mongodb包,实际上mongodb是Mongoose的底层依赖,无需单独引入。 - 连接回调处理错误:
.then(console.log('DB Connected'))会直接执行console.log,而非在连接成功时触发;且handleError函数未定义,无法处理连接失败的情况。 - 操作时序错误:在数据库连接未完成时就执行
fruit.save(),Mongoose会将操作放入缓冲区,超时后抛出错误。
修复后的完整代码
const mongoose = require('mongoose'); // 定义错误处理函数 const handleError = (error) => { console.error('数据库连接失败:', error); process.exit(1); }; // 确保连接成功后再执行数据库操作 mongoose.connect('mongodb://localhost:27017/fruitsDB') .then(() => { console.log('DB Connected'); // 连接成功后初始化Schema、Model const fruitSchema = new mongoose.Schema({ name: String, rating: Number, review: String }); const Fruit = mongoose.model("Fruit", fruitSchema); // 创建并保存文档 const fruit = new Fruit({ name: "Apple", rating: 7, review: "Great!" }); return fruit.save(); }) .then(() => { console.log('文档保存成功'); mongoose.connection.close(); // 操作完成后关闭连接(可选) }) .catch(handleError);
额外排查点
- 确认本地MongoDB服务已启动:终端执行
mongod命令,检查服务是否正常运行。 - 验证连接地址正确性:确保端口为默认的27017,若修改过MongoDB端口需同步更新连接字符串。
- 检查防火墙设置:确认未阻止MongoDB端口的网络连接。
内容的提问来源于stack exchange,提问作者JoshPL
相关产品推荐
相关产品推荐

