传递给jade的对象最终为字符串

时间:2015-12-15 13:16:01

标签: javascript node.js pug

我想将一个对象从节点传递给jade,并在我的js中使用它。 但它最终为[object Object]字符串,我不知道为什么

服务器侧

var currentProblem = problemMaker.makeProblem(level);
console.dir(currentProblem); // [ { value: 2, operation: '+' }, {value: 1, operation: '-' } ]

res.render('training', {
    // ...
    Oid             : problemOid,
    problemObject   : JSON.stringify(currentProblem)
});

script(type='text/javascript').
    var problemOid = "!{Oid}"  // this WORKS
script(type='text/javascript').
    var problemObj = "!{JSON.parse(problemObject)}"  // this does NOT

(请注意,webstorm标记" problemObject"作为未解析的变量,而Oid似乎没有问题)

浏览器js

console.log(typeof problemObj);  // string
console.dir(problemObj);         // [object Object],[object Object]

我尝试使用和不使用stringify / parse,没有区别。 我做错了什么?

感谢

解决方案

我通过删除引号并删除任何JSON.xxxx

来实现它

工作代码:

script(type='text/javascript') var problemObj = !{problemObject};

1 个答案:

答案 0 :(得分:3)

删除逗号并使用JSON.stringify代替JSON.parse

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

这里的主要想法

var str = JSON.stringify({a: 1000}); // returns string "{"a":1000}"
console.log(str); // print {"a":1000}

所以,在你的html中你会看到

script var str = !{JSON.stringify({a: 1000})}; 

->

<script>
    var str = {"a":1000};
</script>