我试图将用户对象从 passport 发送到浏览器,但我得到的只是控制台中的 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
。可能是什么问题?
最佳答案
渲染不保留对象。您传递的对象 .render
函数被用作模板的字符串宏,所以如果你的索引模板有一个 {{ user }}
或 <% user %>
在其中(语法取决于您选择的模板引擎),然后它将写入您的 user
的字符串内容强制进入您的文件。
索引:
<p>{{ user }}</p>
调用:
res.render('index', {user: {"name": "monkey"}});
结果:
<p>{"name": "monkey"}</p>
那是文本,不是 JavaScript 对象。当然我们可以确保字符串进入脚本 block :
索引:
<script> var user = {{ user }}; </script>
调用:
res.render('index', {user: {"name": "monkey"}});
结果:
<script> var user = {"name": "monkey"}; </script>
现在我们可以突然在页面上的其他 JavaScript 中使用它。
关于javascript - Express 不会将对象传递给 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18903357/