首页 > 解决方案 > 在 nodejs 中的 res.render 之前设置变量

问题描述

我正在尝试将 userGameList 设置为 User.games,但 res.render 不等待变量,第一个日志是我所期望的,但第二个是空字符串。我试过异步和等待。

app.get('/games', async (req, res) => {

  var userGameList = "";

  if (req.isAuthenticated()) {
    User.findById(req.user.id, async function(err, foundUser) {
      if (err) {
        console.log(err)
      } else {
        if (foundUser) {
          userGameList = await foundUser.games;
          console.log(userGameList); // log with the right value
        }
      }
    })
  };

  console.log(userGameList); // log empty string

  res.render('pages/games-list', {
    req: req,
    parentPage: "/",
    pageTitle: "Games",
    myUserGames: userGameList
  });

标签: node.jsmongoose

解决方案


userGameList一旦在异步方法中可用,您就返回响应。

这是异步函数 (User.findById) 的本质,除非等待,否则它将释放线程以执行下一个代码块。一旦收到响应,异步函数就会执行回调。

app.get('/games', async (req, res) => {

  var userGameList = "";

  if (req.isAuthenticated()) {
    User.findById(req.user.id, async function(err, foundUser) {
      if (err) {
        console.log(err)
      } else {
        if (foundUser) {
          userGameList = await foundUser.games;
          console.log(userGameList); // log with the right value

            res.render('pages/games-list', {
              req: req,
              parentPage: "/",
              pageTitle: "Games",
              myUserGames: userGameList
            });
        }
      }
    })
  };


推荐阅读