这真杀了我。通过express.render将json从app.js(server)发送到main.ejs(client)可以正常工作。用jstl捕获它可以正常工作。但是,当在main.ejs内使用标记时,jstl标记会将json中的撇号转换为html代码(“)。因此它无法识别json并抛出错误。
这是我要发送的原始json数据。
[{ contacts:
{ facebook: '12', linkedIn: 'li', phoneNum: 'ph', github: 'git' },
_id: 5d6d11f3b1160c12404e8eab,
name: 'portfolio9',
intro: 'intro',
resume: 'resume',
body: 'body',
liked: 1 },
{ contacts:
{ facebook: '12', linkedIn: 'li', phoneNum: 'ph', github: 'git' },
_id: 5d6d11fab1160c12404e8eac,
name: 'portfolio10',
intro: 'intro',
resume: 'resume',
body: 'body',
liked: 1 } ]
失败的方法:uriencode / decoding,json字符串化/解析,将其拆分为单个json而不是json数组。字符串replace(/“ / gi,”'“)然后json解析也失败。所有错误都相同(意外令牌)。
来自app.js的代码
res.render("main",{settings:settings,portfolios:ports[0],articles:articles[0]});
main.ejs中的代码
<%console.log(portfolios)%> //this is normally printed on my cmd console
<script>
let tmp=<%=portfolios%>;
console.log(tmp); //{"contacts":{"facebook":"12","linkedIn":"li","phoneNum":"ph","g..
</script>
这种垃圾会在chrome客户端控制台中出现。全部'转换为html代码。