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

Node.js EJS数组解析失败:Firebase数组无法在视图渲染

解决EJS中传递数组对象后前端无法解析的问题

我明白你遇到的问题了——明明后端已经把正确格式的数组传给了EJS,但前端拿到的却是一堆[object Object],还没法用JSON.parse解析。这其实是EJS输出方式导致的小坑,咱们一步步解决:

问题根源

当你在EJS里用<%= list %>输出数组时,EJS会默认调用数组的toString()方法。而数组里的对象转成字符串就是[object Object],所以最终输出到前端的是类似"[object Object],[object Object]"的字符串,这根本不是合法的JSON格式,自然会导致JSON.parse报错。

正确解决方案

你需要在EJS里用不转义输出的方式,把数组直接序列化成合法的JSON字符串:

步骤1:修改EJS中的变量输出

把原来的:

var initData = ('<%= list %>');

改成:

var initData = <%- JSON.stringify(list) %>;

这里的关键是两个点:

  • <%-:和<%=不同,它会直接输出原始内容,不会转义双引号等特殊字符,保证JSON格式的合法性。
  • JSON.stringify(list):在EJS层面把后端传来的数组转成标准的JSON字符串,前端拿到后直接就是JavaScript对象,不需要再JSON.parse。

步骤2:前端直接使用数据

修改后,你可以直接在JS里操作initData了,比如遍历渲染:

$(document).ready(function () {
  var initData = <%- JSON.stringify(list) %>;
  console.log(initData); // 现在能看到完整的数组对象了
  
  // 遍历数据渲染到页面
  initData.forEach(store => {
    // 示例:创建DOM元素插入页面
    const storeElement = `<div class="store">
      <p>地址:${store.address}</p>
      <p>第三张图:${store.thirdImage}</p>
    </div>`;
    $('body').append(storeElement);
  });
});

验证后端代码

你的后端代码其实是没问题的:

messageRef.child("store").once('value').then((snapshot) => { 
  for (val in snapshot.val()) { 
    arraytoapproval.push(snapshot.val()[val]); 
  } 
  console.log(arraytoapproval); 
  res.render('showallstore',{flag:"success login",list: arraytoapproval}) 
}); 

已经正确把Firebase里的数据存入数组并传递给了EJS,不需要修改这部分。

内容的提问来源于stack exchange,提问作者john.P

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:29:10