我尝试用Mongoose查询所有用户,并将它们传递到res.render()中,以便能够在ejs文件中显示它们。
以下是我的代码:
const customersView = (req, res) => {
const emailsArr = [];
User.find({}, function(err, users) {
users.forEach(function(user) {
emailsArr.push(user.email);
});
console.log('Inside: ' + emailsArr);
// I can put res.render() here
});
console.log('Outside: ' + emailsArr);
// But I have to do some more queries here and then send them back all at once
res.render('customers.ejs', {users: emailsArr});
}
但是,在User.find()之外,emailsArr是空的。
控制台输出:
[nodemon] restarting due to changes...
[nodemon] starting `node index.js`
Server started
Connected to MongoDB
Outside:
Inside: test@test,admin@admin
我可以把res.render()放在find()里面,但问题是我需要在这个用户查询之后有更多的查询,然后把所有的结果一次传递给ejs。我该怎么解决这个问题呢?
1条答案
按热度按时间niknxzdl1#
问题是“外部”代码在之前执行,因为
User.find
是一个回调,所以它在拥有用户之前不会执行,这就是为什么它在拥有用户之前不会执行。将
customersView
函数更改为异步,并在User.find
中使用await