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

MongoDB Atlas执行.find()查询返回空对象问题求助

问题根因

查询返回空不是数据不存在,是代码存在几处明显错误:

  • 最核心的问题:路由里的.toArray()是异步返回Promise的方法,你没加await等待查询完成,直接把未完成的Promise对象发给前端,自然拿不到实际数据。
  • 数据库连接逻辑冗余错误:MongoClient.connect()本身就已经完成连接建立,你后面又写了一行await dba.connect()重复调用连接方法,属于无效逻辑,极端情况还会触发连接报错。
  • 环境变量默认值写法错误:const { PORT, URI } = process.env || 5000; 这行的兜底完全不生效,Node正常运行时process.env对象必然存在,不会走后面的5000兜底,就算走了兜底,解构出来的PORT和URI还是undefined。
  • 额外排查点:MongoDB对库名、集合名大小写敏感,你代码里写的库名是Auth、集合名是Users,要和Atlas控制台里实际的命名完全一致,差一个大小写都会查不到数据。
修复后代码

服务端入口文件修正

require("dotenv").config({ path: "./config.env" });
const { MongoClient, ServerApiVersion } = require("mongodb");
const express = require("express");
const { ServiceBroker } = require("moleculer");
const AUTH_SERVICE = require("./controller/services/auth/auth.service");

global.broker = new ServiceBroker({
  nodeID: "auth",
});

const app = express();
app.use(express.json());
app.use("/auth", require("./routes/auth"));

// 修正环境变量默认值写法
const PORT = process.env.PORT || 5000;
const URI = process.env.URI;

global.broker.createService(AUTH_SERVICE);

const start = async () => {
  const dba = await MongoClient.connect(URI, {
    useNewUrlParser: true,
    useUnifiedTopology: true,
  });
  global.db = dba.db("Auth");
  console.log("DATABASE CONNESSO CON SUCCESSO📡");

  await global.broker.start();
  app.listen(PORT, () => console.log(`PORT IT'S UP AND RUNNING 🚀 ON ${PORT}`));
};
start();

说明:删掉了重复的dba.connect()调用,修正了环境变量的默认值赋值逻辑

路由文件修正

const express = require("express");
const router = express.Router();

router.get("/register", async (req, res) => {
  // 给异步查询加await,等待结果返回再响应
  const data = await global.db.collection("Users").find({}).toArray();
  res.send(data);
});

module.exports = router;

说明:给.toArray()加了await关键字,确保查询完成拿到数组结果后再返回给前端,后续可以自行加try/catch做错误捕获,避免查询报错时服务直接挂掉

改完重启服务再调用接口,就能正常查到已存储的用户数据。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 00:37:03