Javascript 在Pug中将对象变量从服务器传递到客户端

Javascript 在Pug中将对象变量从服务器传递到客户端,javascript,node.js,express,pug,Javascript,Node.js,Express,Pug,我知道我可以通过如下模板从服务器传递变量: //- template.pug p #{name}'s Pug source code! 就这样打电话 pug.renderFile('template.pug', { name: 'Timothy' }) (按字面意思复制/粘贴自 但我想传递“更复杂”的变量,例如,我的哈巴狗源可能包含在其中 script. window.foo = !{foo}; 我想传递对象列表: foo = [{one: 1}, {two: 2}, {three

我知道我可以通过如下模板从服务器传递变量:

//- template.pug
p #{name}'s Pug source code!
就这样打电话

pug.renderFile('template.pug', {
  name: 'Timothy'
})
(按字面意思复制/粘贴自

但我想传递“更复杂”的变量,例如,我的哈巴狗源可能包含在其中

script.
  window.foo = !{foo};
我想传递对象列表:

foo = [{one: 1}, {two: 2}, {three: 3}];
pug.renderFile('template.pug', { foo });
但这会产生

<script>
window.foo = [[Object object], [Object object
但是我的
foo
变量实际上包含大量的
单撇号字符,所以这也是错误的。并且用
双引号括起来很烦人,因为
JSON.stringify
当然会生成带双引号的JSON

我尝试过逃避每一个
,比如

script.
  window.foo = JSON.parse('!{JSON.stringify(foo).replace(/'/, "\\'")}');
但这是不一致的。我认为字符串化中还有其他字符或奇怪之处使字符串提前结束,每次我反复尝试纠正以前的错误时,都会遇到不同的错误

这就是为什么我想问这个问题,因为我相信一定有一个更简单更好的方法

如何通过pug将完全相同的变量从服务器安全地传递给客户端?

请参阅。如果您不完全了解问题所在,我建议使用属性版本,例如
脚本(id='foo',data foo=JSON.stringify(foo))
script.
  window.foo = JSON.parse('!{JSON.stringify(foo).replace(/'/, "\\'")}');