【问题标题】:Node.js - where to find incoming parameter in the HTML/documentNode.js - 在 HTML/文档中哪里可以找到传入参数
【发布时间】:2015-02-21 03:28:41
【问题描述】:

我的 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 的文档中-但是我可以在文档的哪个字段中找到它?是在头部、身体还是子节点中?在哪里?

【问题讨论】:

  • 你试过在客户端js上赋值吗? <script>var p = "<% propertyOne %>;"</script>
  • 是的,我可以这样做,但我需要将其传递给不在 html 中的脚本,也许我可以使用 EJS 以相同的方式访问它,但我想知道变量是否还附在文件中...
  • 我所说的这个脚本不在 HTML 文件中,它是一个外部脚本,所以我假设我直接将变量传递给外部脚本,或者我将变量附加到 DOM然后通过文档在外部脚本中访问它...
  • 这篇文章试图解决同样的问题tjvantoll.com/2012/07/19/…
  • 这似乎与我发布的一个问题重复或接近:stackoverflow.com/questions/26133910/…

标签: html node.js ejs embedded-javascript


【解决方案1】:

传递的对象只在渲染HTML时使用,不会以任何方式传递给浏览器。

如果您需要页面内的数据,则需要将其放在那里。

当我需要将复杂数据传递给客户端脚本时,我使用的解决方案是在我的 HTML EJS 文件顶部附近放置一个脚本标签,并用我的数据填充它。例如,我可能会在我的模板中添加以下内容:

<script>
    window.MY_DATA = <%= JSON.stringify(myData) %>
</script>

请注意,由于 JSON 是 javascript 的子集,我可以使用 JSON.stringify 将我的数据序列化为适合放置在脚本标签内的形式,并将其分配给我想要的任何变量。

这里的限制是你不能发送任何不能用JSON.stringify序列化的数据。不是一个沉重的负担,但如果你想发送一个函数或其他对象,可能会绊倒你。

【讨论】:

  • 嗨 Hargobind,请参阅下面的回答,我认为您不必对对象进行字符串化,为什么不保持原样?
  • 如果你的值是一个字符串,那很好,问题是对于更复杂的数据,你需要一些方法来序列化和反序列化数据。此外,JSON.stringify 提供了一种方便的方法来避免脚本标签内的任何安全问题,因为它可以正确转义任何奇数字符。
  • 稍后会回复您,如果您可以避免反序列化/序列化这将是一个优势,但也许您不能。总而言之,这很愚蠢。
  • 有没有办法从后端检索整个对象而不是前端的字符串?
  • 这就是我在服务器上使用JSON.stringify 并将其替换为脚本标记的方法所实现的。当浏览器读取脚本标签时,它将解析 JSON 数据(因为 JSON 是 JavaScript 的严格子集)并将结果放入您分配给它的任何变量中。
【解决方案2】:

我找到的解决方案是在我的 HTML 中定义一个全局属性,如下所示:

<a name="team" value="<%=team._id%>"></a>

然后我可以像这样在任何脚本中访问它:

<script>
var team = document.getElementsByName('team');
</script>

这将返回正确的对象。 但是,我认为这不是最好的答案,尤其是考虑到任何全局定义的变量通常都是一个坏主意。我希望这个问题能得到另一个答案。

【讨论】:

    猜你喜欢
    • 2013-09-04
    • 2018-02-20
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2020-10-06
    • 1970-01-01
    • 2019-08-23
    相关资源
    最近更新 更多