亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將變量傳遞給ExpressJS中的JavaScript

將變量傳遞給ExpressJS中的JavaScript

慕絲7291255 2019-11-29 10:34:25
我對此完全迷失了;我正在使用NodeJS來獲取JSON,我需要將變量傳遞給頁面并讓JavaScript使用數據。app.get('/test', function(req, res) {    res.render('testPage', {        myVar: 'My Data'    });那就是我的Express代碼(對于測試而言非常簡單);現在使用EJS,我想收集這些我知道要呈現在頁面上的數據,<%= myVar %>但是我需要能夠在JavaScript中收集這些數據(如果可能在.js文件中),但現在只是在我嘗試過的“警告”框中顯示變量在翡翠中就像alert('!{myVar}')或!{JSON.stringify(myVar)}。我可以在EJS中做類似的事情嗎?我不需要像<input type=hidden>javascript 這樣的字段并采用該字段的值。如果有人可以幫助,不勝感激
查看完整描述

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>


查看完整回答
反對 回復 2019-11-29
?
慕田峪7331174

TA貢獻1828條經驗 獲得超13個贊

如果您有更復雜的對象(例如數組),則可以執行以下操作:


<% if (myVar) { %>

   <script>

      myVar = JSON.parse('<%- JSON.stringify(myVar) %>');

   </script>

<% } %>

否則,您之前看到的解決方案將不起作用


查看完整回答
反對 回復 2019-11-29
  • 3 回答
  • 0 關注
  • 698 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號