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
相关产品推荐
相关产品推荐

