Mongoose查询超时求助:restaurants.find()缓冲超时10000ms
解决MongooseError: Operation 'restaurants.find()' buffering timed out after 10000ms
这个错误核心原因是Mongoose在未成功建立MongoDB连接的情况下执行了数据库查询,导致操作被缓冲后超时。以下是针对性解决方案:
1. 确保数据库连接成功后再启动服务器
当前代码中服务器可能在MongoDB连接完成前就开始处理请求,直接导致查询缓冲超时。修改server.js,等待数据库连接成功后再监听端口:
const express = require('express'); const app = express(); const db = require('./database/database').connection; // 加载中间件、路由等配置... // 等待数据库连接成功后启动服务 db.once('open', () => { app.listen(3000, () => { console.log('Server running on port 3000'); }); });
2. 检查并修正MongoDB连接配置
验证环境变量加载
在database.js中添加日志,确认环境变量是否正确加载:
const mongoose = require('mongoose'); const mongoURI = process.env.MONGODB_URI; const dbName = process.env.DATABASE_NAME; // 打印变量确认是否正确读取 console.log('MongoDB URI:', mongoURI); console.log('Database Name:', dbName); mongoose.connect(mongoURI, { dbName: dbName, useNewUrlParser: true, useUnifiedTopology: true, connectTimeoutMS: 30000, // 延长连接超时到30秒 socketTimeoutMS: 60000 // 延长socket超时到60秒 }); const db = mongoose.connection; db.on('error', (err) => { console.error('Mongoose connection error:', err); }); db.once('open', () => { console.log('Connected to MongoDB via Mongoose'); }); module.exports = mongoose;
- 确认
MONGODB_URI格式正确(本地库为mongodb://localhost:27017,云库为mongodb+srv://开头) - 确认
DATABASE_NAME对应的数据库已在MongoDB中存在
3. 关闭Mongoose操作缓冲(可选,快速排查)
如果不想在连接未建立时缓冲操作,直接抛出错误定位问题,可在连接配置中添加bufferCommands: false:
mongoose.connect(mongoURI, { dbName: dbName, useNewUrlParser: true, useUnifiedTopology: true, bufferCommands: false, // 关闭操作缓冲 connectTimeoutMS: 30000, socketTimeoutMS: 60000 });
4. 验证Restaurant模型定义
检查models/Restaurant.js是否正确导出模型:
const mongoose = require('../database/database'); const RestaurantSchema = new mongoose.Schema({ registrationStatus: String, averageRating: Number, numberOfReviews: Number // 其他字段定义... }); // 确保正确导出模型 module.exports = mongoose.model('Restaurant', RestaurantSchema);
同时确认RestaurantRouter.js中模型导入路径正确:
const Restaurant = require('../../models/Restaurant');
5. 单独测试数据库连接
运行database.js单独验证连接是否正常:
node backend/database/database.js
若控制台输出Connected to MongoDB via Mongoose则连接正常;若报错,根据错误信息修复(比如MongoDB服务未启动、网络不通、权限不足等)。
内容的提问来源于stack exchange,提问作者TheStranger
相关产品推荐
相关产品推荐

