You need to enable JavaScript to run this app. Node.js中res.render前设置变量异步赋值后仍为空如何解决?
优惠活动
大模型
产品
解决方案
定价
更多

Node.js中res.render前设置变量异步赋值后仍为空如何解决?

问题原因
  • 核心是异步执行逻辑顺序错误:User.findById传入回调函数时属于回调式异步调用,不会返回Promise,外层路由的async逻辑无法感知该异步操作的执行进度,会直接执行后续的console.log与res.render代码,此时回调里的赋值逻辑还未触发,所以userGameList还是初始的空字符串。
  • 代码中await foundUser.games属于不必要写法:如果games是用户模型的关联属性,只要成功查询到用户数据就可以直接读取,不需要额外await。
修复方案

将回调式调用改为async/await的Promise调用形式,确保数据库查询完成后再执行后续逻辑,修复后代码如下:

app.get('/games', async (req, res) => {
  let userGameList = "";

  if (req.isAuthenticated()) {
    try {
      // 等待数据库查询完成再往下执行
      const foundUser = await User.findById(req.user.id);
      if (foundUser) {
        userGameList = foundUser.games;
        console.log(userGameList);
      }
    } catch (err) {
      console.log(err);
    }
  }

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

内容的提问来源于stack exchange,提问作者Artemis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 10:24:03