NodeJS使用EJS渲染时userlist调用forEach报undefined但控制台有数据
问题根因
- 后端数据取值错误:接口返回的响应体结构为外层包含
data字段存储用户数组,不存在你代码中引用的results字段,导致传给EJS模板的userlist为undefined,调用forEach方法直接报错。 - EJS模板循环逻辑错误:循环参数和原数组变量重名/不匹配,循环体内错误使用原数组变量取单个用户属性,即使接口取值正确也无法正常渲染数据。
修复代码
1. 后端路由代码修正
app.get('/process_form', function(req, res){ axios.get('http://127.0.0.1:5000/api/getuser') .then((response)=>{ // 修正取值路径,取response.data下的data字段获取用户数组 var userlist = response.data.data; console.log(userlist); res.render('pages/letseat', { userlist: userlist }); }) // 新增错误捕获逻辑,避免接口请求失败导致页面崩溃 .catch(err => { console.error('接口请求失败:', err); res.render('pages/letseat', { userlist: [] }); }) });
2. EJS模板代码修正
<!-- 先判断userlist为有效数组再执行循环,兜底兼容异常场景 --> <% if (userlist && Array.isArray(userlist)) { %> <% userlist.forEach(function(user) { %> <ul class="list-group list-group-numbered"> <input type="checkbox" name="<%= user.firstname %>"> <li class="list-group-item"><%= user.firstname %>, By: <%= user.lastname %></li> </ul> <% }); %> <% } else { %> <p>暂无可用用户数据</p> <% } %>
内容的提问来源于stack exchange,提问作者Robotboy
相关产品推荐
相关产品推荐

