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
相关产品推荐
相关产品推荐

