При использовании запроса Mon goose, как мне сохранить запрос и использовать его в качестве параметра при рендеринге страницы E JS? - PullRequest
0 голосов
/ 19 июня 2020
• 1000 У меня возникли проблемы с сохранением этих данных и назначением их параметрам E JS при рендеринге страницы.
// 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()
    })
  });

1 Ответ

0 голосов
/ 19 июня 2020

Первое наблюдение:

User.find() - это асинхронная функция, т. Е. Основной поток программы не будет ждать ее выполнения, поэтому undefined будет передано объекту JS. Чтобы избежать этого, вы должны вернуть обещание или использовать asyn c 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 (не используя его где-либо), вам не нужно ждать его, вы можете напрямую вернуть обещание для обратного вызова для ожидания.

...