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

