You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 01:42:36