Mongoose操作MongoDB报fruits.insertOne()缓冲10000ms超时错误
报错根因
MongooseError: Operation fruits.insertOne() buffering timed out after 10000ms是Mongoose连接超时的典型报错:Mongoose默认会在数据库连接未建立时,将所有增删改查操作暂存在内存队列中等待连接就绪,如果10秒内没能成功连上MongoDB,队列里的操作就会直接抛出这个超时错误。
修复步骤
- 第一步:确认本地MongoDB服务正常运行
你当前代码连接的是本地27017端口的MongoDB实例,90%的同类问题都是因为本地MongoDB服务没启动:- Windows:打开任务管理器-服务面板,找到MongoDB服务确认状态为「正在运行」,也可以直接在管理员终端执行
net start MongoDB启动服务 - Mac/Linux:如果用Homebrew安装,执行
brew services start mongodb-community启动服务
启动服务后可以在终端执行mongosh命令,能正常进入MongoDB交互终端就说明服务本身没问题。
- Windows:打开任务管理器-服务面板,找到MongoDB服务确认状态为「正在运行」,也可以直接在管理员终端执行
- 第二步:修正连接代码,补全配置+等待连接就绪再执行操作
你当前的连接代码缺少必要配置项,且没有等待连接完成就直接执行了save()操作,把代码改成如下形式:
const mongoose = require('mongoose'); // 补全新版本Mongoose要求的配置项,显式处理连接成功/失败逻辑 mongoose.connect('mongodb://127.0.0.1:27017/fruitsDB', { useNewUrlParser: true, useUnifiedTopology: true }) .then(() => { console.log('MongoDB连接成功'); // 连接成功后再执行数据操作 const fruitSchema = new mongoose.Schema({ name: String, rating: Number, review: String }); const Fruit = mongoose.model('Fruit', fruitSchema); const fruit = new Fruit({ name: "Banana", rating: 7, review: "Much loved." }); return fruit.save(); }) .then(savedDoc => { console.log('文档保存成功:', savedDoc); mongoose.connection.close(); // 操作完成后关闭连接 }) .catch(err => { console.error('执行出错:', err); });
这里特意把localhost换成了127.0.0.1,部分Windows系统下localhost会默认解析到IPv6地址,也会导致连接失败。
- 第三步:排查端口占用问题
如果上面两步做完还是报错,执行netstat -ano | findstr 27017(Windows)或者lsof -i :27017(Mac/Linux),看27017端口是不是被MongoDB以外的程序占用,如果是就修改MongoDB配置的监听端口,同步修改连接串里的端口号即可。
内容的提问来源于stack exchange,提问作者83hru2
相关产品推荐
相关产品推荐

