【问题标题】:Express doesn't pass object to the viewExpress 不会将对象传递给视图
【发布时间】:2013-09-19 19:32:05
【问题描述】:

我试图将用户对象从护照发送到浏览器,但我得到的只是控制台中的window.user undefined

在路线中,我用console.log("USER:"+JSON.stringify(req.user, null, 4))检查了对象

我得到了正确的输出:

USER :{
    "emails": [
        {}
    ],
    "nick": "nickname",
    "identifier": "76561197990749921",
    "points": 140
}

在尝试使用res.render('index', {user: req.user}); 发送它时,我无法从窗口对象中检索它。但是当我发送一些属性时,例如res.render('index', {user: req.user.points});,它被附加到window.user,因为它应该......另一方面,在尝试发送req.user.nick时,它也没有附加到window。可能是什么问题?

【问题讨论】:

  • 你用的是什么模板引擎?玉?
  • @PherricOxide 是的,翡翠
  • 据我所知,迈克的回答是正确的;我不认为变量会像那样附加到窗口对象,而是它们只是作为字符串传递到您的模板中。但是你说req.user.points实际上是附加到window.user的?这让我很感兴趣......
  • attached 是一个糟糕的表达方式。我的意思是window.user 可以被检索到。至于现在问题解决了。我需要对对象进行字符串化而不是解析它

标签: javascript node.js express pug


【解决方案1】:

render 不保留对象。您传递.render 函数的对象将用作模板的字符串宏,因此如果您的索引模板中有{{ user }}<% user %>(语法取决于您选择的模板引擎),那么它会将 user 内容强制转换为的 字符串 写入文件。

索引:

<p>{{ user }}</p>

呼叫:

res.render('index', {user: {"name": "monkey"}});

结果:

<p>{"name": "monkey"}</p>

那是文本,而不是 JavaScript 对象。当然,我们可以确保字符串进入脚本块:

索引:

<script> var user = {{ user }}; </script>

呼叫:

res.render('index', {user: {"name": "monkey"}});

结果:

<script> var user = {"name": "monkey"}; </script>

现在我们可以突然在页面 JavaScript 的其余部分使用它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-24
    • 1970-01-01
    • 2016-10-06
    • 2020-06-20
    • 1970-01-01
    相关资源
    最近更新 更多