我使用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"));
我不明白为什么我的最终项目列表是空的。
1条答案
按热度按时间9nvpjoqh1#
您必须等待General.find,因为 find 方法返回Promise。另外,请检查日志,pushed 在 final 之后打印,这表明您的find方法是一个异步函数。