You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Node.js数据传递到EJS的JavaScript脚本变量中?

Node.js传递变量到EJS脚本中的问题解决思路

你的路由代码如下:

app.get('/simulation', (req, res) => {
  console.log("simulation results route requested");
  hotels = [
    {
      hotel: 'Hotel Tevini ****superior'
    }
  ];
  console.dir(priceTravelers, {depth:null});
  res.render('simulation/simulation', {jsonData: hotels});
});

你遇到的核心问题是EJS的<%=语法会对输出做HTML转义,导致对象被转成[object Object],无法正常解析为前端JS变量。下面是两种可行的解决方法:

方法一:直接在EJS中序列化(推荐)

无需在后端提前处理,通过<%-输出未转义的JSON字符串即可:

<script>
  // 用<%-输出未转义内容,JSON.stringify将后端对象转为合法JSON
  const data = <%- JSON.stringify(jsonData) %>;
  console.log(data); // 此时data为完整数组对象,可直接使用
</script>

方法二:后端序列化后传递

如果要在Node.js端先完成序列化,修改路由代码如下:

app.get('/simulation', (req, res) => {
  console.log("simulation results route requested");
  hotels = [
    {
      hotel: 'Hotel Tevini ****superior'
    }
  ];
  console.dir(priceTravelers, {depth:null});
  // 先将对象转为JSON字符串再传递
  res.render('simulation/simulation', {jsonData: JSON.stringify(hotels)});
});

然后在EJS中用<%-直接输出,无需额外解析:

<script>
  const data = <%- jsonData %>;
</script>

之前方法失败的原因

  • 使用<%=时,EJS会自动调用对象的toString()方法,得到[object Object]字符串,赋值给变量后自然无法解析为对象。
  • 即使后端做了序列化,<%=会把JSON字符串中的双引号转义成&quot;,导致JSON.parse时出现语法错误。

内容的提问来源于stack exchange,提问作者Patrik Horemans

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 16:22:16