MongoDB集合返回空对象,为什么?

时间:2019-10-13 15:53:50

标签: javascript node.js mongodb mongoose mongoose-schema

我正试图从我的集合中获取所有名为“用户”的数据,而我返回的只是未定义

在名为 leaderboard / lb.js 的文件夹和文件中,是的,我的数据库称为集合:

const mongoose = require("mongoose");

let out = {};

mongoose.connect(`mongodb+srv://ramoth123:${process.env.MONGOPASS}@ramfish-bot-mgpji.mongodb.net/collections?retryWrites=true&w=majority`, { useNewUrlParser: true }, function(err, db) {

    if (err) throw err;
    //let dbo = db.db("collections");
    db.collection("users").find({ xp: Number }).toArray(function(err, result) {
      if (err) throw err;
      out.users = result;     
      db.close();
    });

});                             



function leaderboardUsersRaw() {
  return out.users
}

module.exports = leaderboardUsersRaw

In my database collection named "users"

在我的 server.js 文件中:

app.get("/leaderboard", (req, res) => {
  const leaderboardFile = require("./leaderboard/lb.js")

  let users = leaderboardFile()

  console.log(users)


  res.send(users)
})

我在做什么错??

编辑:现在可以正常工作,但是在加载2次后,tf是这个吗?

1 个答案:

答案 0 :(得分:0)

您的数据库查询是异步的,因此您的函数将在查询完成之前返回用户。

您可以尝试使用 async-await

尝试一下:

**排行榜/lb.js **

const mongoose = require("mongoose");

async function leaderboardUsersRaw() {
  const db = await mongoose.connect(`mongodb+srv://ramoth123:${process.env.MONGOPASS}@ramfish-bot-mgpji.mongodb.net/collections?retryWrites=true&w=majority`, { useNewUrlParser: true });

  const users = await db.collection("users").find({ xp: Number });

  const result = users.toArray();

  db.close();

  return result;
}

module.exports = leaderboardUsersRaw;

server.js

const leaderboardFile = require("./leaderboard/lb.js");

app.get("/leaderboard", async (req, res) => {
  try {
    let users = await leaderboardFile();

    res.send(users);
  }
  catch(err) {
    // Handle error
  }
});

我希望这会有所帮助。