3 回答

TA貢獻1806條經(jīng)驗 獲得超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包含的內(nèi)容。如果其中包含用戶生成的內(nèi)容,則可能會使您的網(wǎng)站保持打開狀態(tài),以進行腳本注入攻擊。
防止這種情況發(fā)生的可能解決方案:
<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條經(jīng)驗 獲得超13個贊
如果您有更復雜的對象(例如數(shù)組),則可以執(zhí)行以下操作:
<% if (myVar) { %>
<script>
myVar = JSON.parse('<%- JSON.stringify(myVar) %>');
</script>
<% } %>
否則,您之前看到的解決方案將不起作用
添加回答
舉報