使用mongoose提取数据后无法在列表中存储数据

eagi6jfj  于 2023-01-26  发布在  Go
关注(0)|答案(1)|浏览(82)

我使用express js和mongoose从集合中获取数据,并将其存储在列表中,然后将其发送到一个ejs文件。但我不知道为什么数据没有存储在列表中。以下是我的代码。

app.get("/", (req, res) => {
  
    let item =  [];
    General.find(null, (err, data)=>{
            if(err){
              console.log(err); 
            } else {
                data.forEach(element => {
                    item.push(element.name);
                });
                console.log("pushed "+item);                 
            }
        });

    console.log("final  "+item);
    res.render("index", { title: "Welcome", list: item});
});

这是当我运行上面的程序时在控制台中打印出来的。

listening 3000
final
pushed item-1,item-2

这是我的DB收藏

[
  { _id: ObjectId("63d165717d847e937728e63b"), name: 'item-1', __v: 0 },
  { _id: ObjectId("63d165857d847e937728e63e"), name: 'item-2', __v: 0 }
]

以下是我的配置

const express = require("express");
const bodyParser = require("body-parser");
const mongoose = require("mongoose");

mongoose.set("strictQuery", false);
mongoose.connect("mongodb://127.0.0.1:27017/todolistDB", { useNewUrlParser: true });
const genSchema = new mongoose.Schema({ name : String });
const General = mongoose.model("General", genSchema);

const app = express();
app.set('view engine', 'ejs');
app.use(bodyParser.urlencoded({ extended: "true" }));
app.use(express.static("public"));

我不明白为什么我的最终项目列表是空的。

9nvpjoqh

9nvpjoqh1#

您必须等待General.find,因为 find 方法返回Promise。另外,请检查日志,pushedfinal 之后打印,这表明您的find方法是一个异步函数。

app.get("/", async (req, res) => {
  
    let item =  [];
    await General.find(null, (err, data)=>{
            if(err){
              console.log(err); 
            } else {
                data.forEach(element => {
                    item.push(element.name);
                });
                console.log("pushed "+item);                 
            }
        });

    console.log("final  "+item);
    res.render("index", { title: "Welcome", list: item});
});

相关问题