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

MongoDB读取异常:res.json()无返回但console.log能显示数据

问题分析与解决

你的代码存在几个关键问题导致接口无数据返回:

  • MongoDB连接未就绪就处理请求:mongoose.connect是异步操作,直接启动服务并处理请求时,数据库可能还没连接成功,此时查询会返回空数组。
  • 错误的日志打印:console.log(model.find({}))打印的是Mongoose的Query对象,不是实际查询到的数据,这会让你误以为查询有结果。
  • 缺少连接错误处理:没有监听数据库连接失败的情况,无法排查连接问题。

修正后的代码

import express from "express";
import mongoose from "mongoose";

const app = express();

// 封装数据库连接逻辑,确保连接成功后再启动服务
async function connectDB() {
  try {
    await mongoose.connect("mongodb+srv://dontlook:nottheactualpass@cluster0.ccflqch.mongodb.net/dashboard");
    console.log("MongoDB连接成功");
    // 连接成功后启动服务
    app.listen(3000, () => {
      console.log(`App is running at http://localhost:3000/getData`)
    });
  } catch (err) {
    console.error("MongoDB连接失败:", err);
    process.exit(1); // 连接失败时退出进程
  }
}

const schema = new mongoose.Schema({
  end_year: String,
  intensity: String
});
const model = mongoose.model("dataset", schema);

app.get("/getData", async (req, res) => {
  try {
    const data = await model.find({});
    res.json(data);
    console.log("查询到的数据:", data); // 打印实际查询结果
  } catch (err) {
    console.error("查询错误:", err);
    res.status(500).json({ error: "Internal Server Error" });
  }
});

// 启动数据库连接
connectDB();

关键修正点

  • 用async/await等待数据库连接成功后再启动Express服务,确保查询时连接已就绪
  • 将console.log(model.find({}))改为打印实际查询结果data,避免误导
  • 添加数据库连接失败的错误捕获,便于排查问题
  • 分离连接逻辑和路由逻辑,代码结构更清晰

内容的提问来源于stack exchange,提问作者Arnab

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 05:54:57