我正在try 使用Mongoose查询所有用户,并将它们传递给res.render()以便能够在ejs文件中显示它们.

Here is my code:

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是空的.

The console output:

[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.我怎么才能解决这个问题呢?

推荐答案

问题是"外部"代码之前正在执行,因为User.find是一个回调,所以它直到拥有用户才会执行,这就是为什么它只有拥有用户才会执行.

const customersView = async (req, res) => {

  const emailsArr = [];

  const users = await User.find({}).catch(err => {
      // handle error here
  });

  //Your stuff
  users.forEach(function(user) {
    emailsArr.push(user.email);
  });

  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});
}

customersView函数更改为异步,并在User.find中使用await

Node.js相关问答推荐

聚合发布/订阅消息

在Android Studio中react 本机构建失败:未正确检测到Node.js版本

Mongoose查询-如何根据当前查找ID获取其他集合并将其插入到当前查找中?

为什么我收到此错误:MissingSchemaError:架构尚未为模型&业务&注册

如何发送比特币BTC使用发送加密使用WIF密钥在 node ,js

bcrypt.compare 每次都返回 false

连接到在线 redis 数据库时出错

我如何在 Raku 的供应中注册不同的事件?

Nodejs 从链接数组中获取数据并保存到 mongodb

当我try 从本地主机发布新产品时收到错误消息

node Axios 创建全局令牌变量以在单独的变量头中使用

MongoDB Atlas中的聚合触发器不起作用

WSL2 上需要脚本运行的 NPM 包的权限被拒绝

Node.js 大文件上传到 MongoDB 阻塞了事件循环和工作池

`npm install` 以Killed结尾

如何以编程方式检测nodejs中的调试模式?

如何在 node 调试器中禁用第一行中断

为当前目录提供服务的简单文件服务器

TypeError:请求路径包含未转义的字符,我该如何解决这个问题

如何解决 Socket.io 404(未找到)错误?