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

Node.js/Express无法从MongoDB读取文档问题求助

GET /users 返回空数组排查与修复

问题背景

调用http://localhost:8000/users接口始终返回空数组,但MongoDB的users集合中存在有效数据,相关代码如下:

server.js

const express = require("express");
const mongoose = require("mongoose");
const app = express();

const uri =
  "mongodb+srv://[REDACTED]:[REDACTED]@cluster0.d5zbb.mongodb.net/?retryWrites=true&w=majority";

async function connect() {
  try {
    await mongoose.connect(uri);
    console.log("Connected to MongoDB");
  } catch (error) {
    console.error(error);
  }
}
mongoose.set("strictQuery", true);
connect();

const userRouter = require("./routes/users");
app.use("/users", userRouter);

app.listen(8000, () => {
  console.log("Server started on port 8000");
});

models/Users.js

const mongoose = require("mongoose");

const userSchema = new mongoose.Schema({
  _id: mongoose.SchemaTypes.ObjectId,
  firstName: String,
  lastName: String,
  phoneNumber: String,
  isVendor: Boolean,
});

module.exports = mongoose.model("User", userSchema, "users");

routes/users.js

const express = require("express");
const router = express.Router();
const User = require("../models/User");

router.get("/", async (req, res) => {
  try {
    const users = await User.find({});
    console.log(users);
    res.json(users);
  } catch (error) {
    res.sendStatus(500);
    console.log(error.message);
  }
});

module.exports = router;

MongoDB users集合示例数据

{"_id":{"$oid":"63f90e2c00f411064f0415a8"},"firstName":"John","lastName":"Customer","phoneNumber":"1111111111","isVendor":false}

排查与修复

1. 数据库连接未指定目标库

你的MongoDB连接字符串uri没有指定具体数据库,mongoose会默认连接到test库,但你的users集合大概率不在该库中。

修复:在连接字符串末尾添加数据库名称,假设集合所在库为userDB,修改后:

const uri =
  "mongodb+srv://[REDACTED]:[REDACTED]@cluster0.d5zbb.mongodb.net/userDB?retryWrites=true&w=majority";

2. 模型导入路径大小写不匹配

routes/users.js中导入的是../models/User,但模型文件实际名为Users.js。在Linux/macOS等大小写敏感的系统中,这会导致模型加载失败,查询返回空数组。

修复:修正导入路径的文件名:

const User = require("../models/Users");

3. 验证步骤

  • 启动服务后,确认控制台输出Connected to MongoDB,确保数据库连接成功。
  • 在接口的try块中添加日志,确认当前连接的数据库:
    console.log("当前连接数据库:", mongoose.connection.db.databaseName);
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 10:30:22