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

如何在EJS中打印对象数组?Node.js渲染报错排查

问题解决方案

1. 修复EJS变量传递错误

报错users is not defined的核心原因是:ejs.render的第二个参数需要是包含变量名的键值对对象,而非直接传入数组。原代码直接传递users数组,EJS无法将其映射到模板中的users变量。

修改API中的渲染代码:

// 原代码
const content = ejs.render(template, users);

// 修改后
const content = ejs.render(template, { users }); // 用对象包装,键名对应模板变量名

2. 修复模板循环越界问题

模板中i <= users.length的条件会导致循环到i = users.length时,访问users[i]出现undefined(数组索引从0开始,最大有效索引为users.length - 1),需将条件改为i < users.length。

3. 修复表格结构错误

当前模板把所有用户的<td>放在同一个<tr>里,会导致表格布局完全混乱,需在循环内部生成完整的<tr>标签。

修改后的EJS模板代码:

<tr>
  <th>Name</th>
  <th>Contact</th>
</tr>
<% for(let i = 0; i < users.length; i++ ){ %>
  <tr>
    <td><%= users[i].name %></td>
    <td><%= users[i].mobile %></td>
  </tr>
<% } %>

可选优化:简化循环写法

用forEach替代for循环,代码更简洁易读:

<tr>
  <th>Name</th>
  <th>Contact</th>
</tr>
<% users.forEach(user => { %>
  <tr>
    <td><%= user.name %></td>
    <td><%= user.mobile %></td>
  </tr>
<% }) %>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 23:55:24