我的 Node 中有以下函数.js该代码呈现一个 HTML 页面并向其传递一个名为 htmlParamObj
的 JavaScript 对象
exports.getPage = function (req, res, next) {
var htmlParamObj= {
propertyOne: 'yada',
propertyTwo: 'yada yada'
};
res.render('myPage.html',htmlParamObj);
};
我可以使用 EJS 访问传入参数 ( htmlParamObj
),如下所示:<% propertyOne %>
,但我不知道如何通过文档本身访问htmlParamObj
。我相信htmlParamOb'将附加到html的文档 - 但是我可以在文档中的哪个字段中找到它?是在头部,身体,还是孩子?哪里?
传递的对象仅在呈现 HTML 时使用,不会以任何方式传递给浏览器。
如果您需要页面中的数据,则需要将其放在那里。
当我需要将复杂数据传递到客户端脚本时,我使用的解决方案是在我的 HTML EJS 文件的顶部附近放置一个脚本标记,并用我的数据填充它。例如,我可以将以下内容添加到我的模板中:
<script>
window.MY_DATA = <%= JSON.stringify(myData) %>
</script>
请注意,由于 JSON 是 javascript 的子集,因此我可以使用 JSON.stringify
将数据序列化为适合放置在脚本标签内的形式,并将其分配给我想要的任何变量。
这里的限制是您无法发送任何无法使用 JSON.stringify
序列化的数据。不是一个沉重的负担,但如果你想发送一个函数或其他对象,可能会绊倒你。
我找到的解决方案是在我的 HTML 中定义一个全局属性,如下所示:
<a name="team" value="<%=team._id%>"></a>
然后我可以在任何脚本中访问它,如下所示:
<script>
var team = document.getElementsByName('team');
</script>
这将返回正确的对象。但是,我不认为这是最好的答案,特别是考虑到任何全局定义的变量通常都是一个坏主意。我希望这个问题能得到另一个答案。