将nodejs对象存储在pug脚本标记中

7ivaypg9  于 2023-06-22  发布在  Node.js
关注(0)|答案(2)|浏览(217)

我有几个对象需要渲染/存储在我的pug文件中,以便以后在客户端JS脚本中使用。
要在脚本标记中存储对象,我将使用herehere描述的方法:
NodeJS变量

const object = {
    "someKey": {
        "message":"this works"
    }
}
res.render("index", {object});

哈巴狗(在文件中的某处-注意。在脚本标记之后)

注意,我还使用了双引号-您可以使用单引号,但我稍后会提到这一点

script.
    var object = JSON.parse("!{JSON.stringify(object)}")

然后在你的JavaScript脚本中

alert(object.someKey.message)

阅读更多关于Pug插值here的信息。

问题:

对于我的所有使用,上面的例子都很好。当我有一个内部带有单引号的对象时,问题就出现了:

const object = {
    "someKey": {
        "message":"this doesn't work"
    }
}

JavaScript不喜欢单引号,因为它将单引号视为对象键/值的开始/结束:
Chrome控制台x1c 0d1x获取

原因:

删除这个单引号可以解决问题。当达到这一点时,JSON.parse()函数抛出异常并停止加载任何和所有JS,因此,没有进一步的函数工作。* 一个解决办法是把这个放在页面的最后,但这并不能解决问题。

问题:

我怎样才能从NodeJS向pug传递一个带单引号的对象(如上所示)?

更新

使用标准NodeJS expresss发布的MCVE锅炉板
https://github.com/cybex-dev/pug-single-quote-isse

设置说明:

git clone https://github.com/cybex-dev/pug-single-quote-isse
npm install 
npm start

你应该看到期望看到一些控制台输出,我只是看到:

“错误线”

lztngnrs

lztngnrs1#

我不能复制你的工作示例:

script.
    var object = JSON.parse("!{JSON.stringify(object)}")

但对我有效的是这样的:

script.
    var object = !{JSON.stringify(object)};
    console.log(object.someKey.message);

不带双引号:var object = !{JSON.stringify(object)}

bxjv4tth

bxjv4tth2#

抱歉,其他解决方案不清楚。

简单:

script.
  var object = !{JSON.stringify(object)};

//- don't forget a blank line to close your script block

相关问题