微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 nodejs 中 res.render 之前设置变量

如何解决在 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
  });

解决方法

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。