3 回答
TA贡献1806条经验 获得超8个赞
您可以使用此(客户端):
<script>
var myVar = <%- JSON.stringify(myVar) %>;
</script>
您还可以使用EJS渲染.js文件:
app.get('/test.js', function(req, res) {
res.set('Content-Type', 'application/javascript');
res.render('testPage', { myVar : ... });
});
但是,模板文件(testPage)仍需要具有.html扩展名,否则EJS将找不到该扩展名(除非您另行告诉Express)。
正如@ksloan在评论中指出的那样:您必须小心myVar包含的内容。如果其中包含用户生成的内容,则可能会使您的网站保持打开状态,以进行脚本注入攻击。
防止这种情况发生的可能解决方案:
<script>
function htmlDecode(input){
var e = document.createElement('div');
e.innerHTML = input;
return e.childNodes.length === 0 ? "" : e.childNodes[0].nodeValue;
}
var myVar = JSON.parse(htmlDecode("<%= JSON.stringify(myVar) %>"));
</script>
TA贡献1828条经验 获得超13个赞
如果您有更复杂的对象(例如数组),则可以执行以下操作:
<% if (myVar) { %>
<script>
myVar = JSON.parse('<%- JSON.stringify(myVar) %>');
</script>
<% } %>
否则,您之前看到的解决方案将不起作用
添加回答
举报