节点JS MongoDB collection.find.toArray不返回任何值

时间:2019-07-06 15:55:20

标签: javascript arrays node.js mongodb asynchronous

我正在建立一个网站,使人们可以书写便签并将其打印在屏幕上。我想将粘滞便笺存储在mongoDB中,该数据库具有一个名为stickyNotes的数据库和一个名为stickyNotes的集合,该集合当前有两个文档。

我有一个名为stickyNotes的变量,它想从数据库上的stickyNotes集合中获取文档,但是当我使用mongodb库中的collection.find.toArray将文档以异步方式输入到stickyNotes变量中时,它显示一个空数组值。

这是我的server.js文件:

const express = require("express");
const mongo = require("mongodb").MongoClient;
const app = express();

let stickyNotes = [];

//mongodb get all sticky notes
const mongoUrl = "mongodb://localhost:27017";
mongo.connect(mongoUrl, { useNewUrlParser: true }, async function(
  err,
  connection
) {
  if (err) {
    console.error(err);
  } else {
    console.log("Succesfully connected to the database");
    const db = connection.db("stickyNotes");
    const stickyNotesCollection = db.collection("stickyNotes");
    stickyNotes = await stickyNotesCollection.find({}).toArray();
  }
  connection.close();
});

console.log(stickyNotes);

app.use(express.static("./src/public"));

app.get("/sticky-notes", (req, res) => {
  console.log("Got a request for sticky notes");
  res.json(stickyNotes);
});

const port = 3000;
app.listen(port, () => {
  console.log(`App is running on port ${port}`);
});

1 个答案:

答案 0 :(得分:0)

可以尝试:

stickyNotesCollection.find({}, (err, result) => {
    if (err) throw err;
    stickyNotes = result;
  });

或在数组中查找结果:

collection.find().toArray(function(err, result) {
    console.log(result);
});

或迭代:

collection.find().each(function(err, result) {
    //once result
});