当使用Mongoose查询时,如何保存查询并在渲染EJS页面时作为参数使用?

问题描述 投票:0回答:1

我正试图建立一个管理仪表板,而这个管理仪表板的一部分,我想展示mongoose数据,如用户和最近完成的辅导课程。我在保存这些数据并在渲染页面时将其分配给EJS参数时遇到了麻烦。

// Admin Dashboard

  // Find students
  function getUsers() {
  User.find({tutor:false}, function(err, foundItems) {
    return foundItems
  })}
  // Find sessions
  function getSessions() {
  Session.find({}, function(err, foundItems) {
    return foundItems;
  })}

app.get('/admin', function(req, res){
    res.render("pages/admin", {
      users: getUsers(),
      sessions: getSessions()
    })
  });
javascript node.js function mongoose ejs
1个回答
0
投票

第一个观察。

User.find() 是一个异步函数,也就是说,程序的主流程不会等待它的执行,因此... ... undefined 将被传递给JS对象。为了避免这种情况,你必须返回一个承诺,或者使用async await。下面是一个例子。

async function getUsers() {
  const foundItems = await User.find({tutor:false})
  return foundItems;
}
  // Find sessions
  async function getSessions() {
  const foundItems = await Session.find({});
  return foundItems;
}

app.get('/admin', async function(req, res){
    res.render("pages/admin", {
      users: await getUsers(),
      sessions: await getSessions()
    })
  });

这更容易读懂. 你可以让它更短。

async function getUsers() {
  return User.find({tutor:false});
}
  // Find sessions
  async function getSessions() {
  return Session.find({});
}

app.get('/admin', async function(req, res){
    res.render("pages/admin", {
      users: await getUsers(),
      sessions: await getSessions()
    })
  });

因为你直接返回foundItems(没有在任何地方使用它),你不需要等待它, 你可以直接返回承诺的回调来等待。

© www.soinside.com 2019 - 2024. All rights reserved.