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

JavaScript如何提取[object Object]中的值?EJS渲染Stripe数据异常修复

问题根因

你在EJS模板中直接输出对象类型的customer.data(Stripe返回的客户对象数组),EJS默认会调用对象的toString()方法,普通JS对象的toString()返回值就是[object Object],因此页面渲染和控制台输出都会出现该问题。

修复方案

前端EJS模板修正

你需要遍历数组时取单个客户的对应字段输出,传递给前端JS的JSON要避免多余转义和引号包裹,修正后的代码如下:

<table class="table table-bordered" id="dataTable" width="100%" cellspacing="0">
  <thead>
    <tr>
      <th>NAME</th>
      <th>EMAIL</th>
      <th>ACTIONS</th>
    </tr>
  </thead>
  <tbody>
    <% if(customer.data.length){ 
      // 提前将客户数组转为JSON字符串,供前端JS使用
      const customerJson = JSON.stringify(customer.data);
    %>
    <script>
      // 用<%- %>输出避免HTML转义,不要加额外引号包裹
      let kk = <%- customerJson %>
      console.log(kk)
    </script>
    <% 
      for(let i = 0;i < customer.data.length;i++) { 
        // 取当前遍历的单个客户对象
        const item = customer.data[i];
    %>
    <tr>
      <td><%= item.name || '-' %></td>
      <td><%= item.email || '-' %></td>
      <td>
        <!-- 可自定义操作按钮逻辑 -->
      </td>
    </tr>
    <% }
    } else { %>
    <tr>
      <td colspan="3">暂无客户数据</td>
    </tr>
    <% } %>
  </tbody>
</table>

关键修正点:

  • 输出JSON给前端JS时使用<%- %>语法,避免EJS自动转义引号等特殊字符,无需额外用引号包裹
  • 遍历时取单个客户对象的name、email等具体字段输出,不要直接输出整个对象/数组
  • 新增空值兜底逻辑|| '-',避免客户未填写对应字段时输出undefined
  • 修正了原代码中表格行标签嵌套错误的问题

后端可选优化

建议增加异常捕获逻辑,同时调整变量名语义避免歧义:

app.get('/dashboard', async(req, res) => {
  try {
    const customers = await stripe.customers.list();
    // 变量名改为customers更符合列表语义,原变量名customer容易误解为单个客户
    res.render('dashboard.ejs', { customers: customers })
    console.log(customers)
  } catch (error) {
    console.error('获取Stripe客户列表失败:', error)
    // 接口报错时也返回空列表,避免模板渲染报错
    res.render('dashboard.ejs', { customers: { data: [] } })
  }
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 01:54:04