如何在不转换的情况下访问内联脚本内部的 into PUG 传递对象

How to access the into PUG passed object inside of an inline script without converting

是否可以在不使用 !{JSON.stringify(object)};

转换的情况下在内联脚本中访问传递到 PUG 的整个对象
 // renderController.js
 res.render('../events', {
    events: {[ {...}, {...}, ... ]},
  });

使用 !{JSON.stringify(events)}; 将现有的 日期对象 转换为 字符串 ,然后需要将其转换回来。

想要的行为:

 // events.pug
 script.
     console.log(events[0].date.toLocaleString());

Is it possible to access the whole object, wich is passed into PUG, inside of an inline script without converting it?

不,不是。您的内联脚本在浏览器中运行。您传递给 Pug 脚本的对象只存在于服务器上,早已不复存在,在浏览器中永远不可用。

因此,正如您似乎已经知道的那样,将数据从服务器共享到浏览器中运行的内联脚本的唯一方法是将数据放入页面中的 Javascript 变量中本身,最简单的方法是在页面脚本内的某个变量定义中将其“呈现”为 JSON。然后将在包含所需数据的内联脚本中建立一个变量。

请注意,数据必须可序列化为 JSON 才能正常工作。服务器端套接字对象等一些东西无法以这种方式传输到前端,因为它们包含对无法转换为 JSON 的本机对象的引用,并且无论如何在另一台计算机上也无用.

对象仅在您的 Pug 模板中定义并用于生成 HTML 然后发送到浏览器。

但是可以做的是将您的 JSON 作为主标签的属性发送,例如

<div class="container" id="data-container" data-demo="Your-JSON-Data">
  ...
  ...
</div>

<script>
 const dataAsString = JSON.parse( $("#data-container").attr("demo"));

</script>