Express JS的EJS模板使用forEach遍历错误提示未定义如何解决
问题原因
核心触发报错的原因有两点:
- 仅在POST请求校验失败调用
res.render时传递了errors变量,用户首次通过GET请求访问admin/posts/create页面时,对应的GET路由没有向模板传递errors变量,模板渲染时找不到该变量直接抛出未定义错误。 - 原有EJS代码中
forEach的回调参数名和数组名重名,虽不是本次报错的直接诱因,但会引发后续逻辑异常。
解决方案
按以下两步修改即可:
- 第一步:修改渲染新建文章页面的GET路由,传递默认值为空数组的
errors参数
// 你原有渲染create页面的GET路由,添加errors传参即可 router.get('/create', async (req, res) => { // 原有逻辑保持不变,render时新增errors参数 res.render('admin/posts/create', { errors: [] }); });
- 第二步:优化EJS模板代码,增加非空判断后再遍历,同时修正回调参数名,建议用
<%=转义输出避免XSS风险
<% if (errors && errors.length > 0) { %> <% errors.forEach(error => { %> <p class="alert alert-danger"><%= error.message %></p> <% }) %> <% } %>
原有POST路由的校验逻辑无需修改,修改完成后即可正常渲染错误提示。
内容的提问来源于stack exchange,提问作者Henry Oladeji
相关产品推荐
相关产品推荐

