如何将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字符串中的双引号转义成",导致JSON.parse时出现语法错误。
内容的提问来源于stack exchange,提问作者Patrik Horemans
相关产品推荐
相关产品推荐

