Node.js+EJS项目遇ReferenceError: usersWithSecrets未定义求解决
问题解决方法
错误根源
访问submit页面时触发usersWithSecrets is not defined错误,核心原因是:
submit.ejs模板中使用了usersWithSecrets变量做循环,但渲染submit页面的路由没有传递这个变量。- 当前仅
/secrets路由会查询用户数据并传递usersWithSecrets,但submit页面对应的路由(如/submit)完全没处理该变量的传递逻辑。
具体解决方案
根据你的业务需求二选一:
方案1:submit页面不需要展示用户秘密(推荐,通常submit是提交页面)
如果submit页面是用来让用户提交个人秘密的表单页,根本不需要展示所有用户的秘密,直接删除submit.ejs中的这段循环代码即可:
<% usersWithSecrets.forEach(function(user){ %> <p class="secret-text"><%=user.secret%></p> <%})%>
方案2:submit页面需要展示用户秘密
如果确实需要在submit页面展示所有带秘密的用户数据,需在App.js中添加/submit的GET路由,查询数据并传递变量:
app.get("/submit", function(req, res){ User.find({"secret": {$ne: null}}, function(err, foundUsers){ if(err){ console.log(err); } else { // 即使查询结果为空,也传递空数组,避免未定义报错 res.render("submit", {usersWithSecrets: foundUsers || []}); } }); });
额外优化:避免空值报错
不管采用哪种方案,后续在EJS中使用变量前建议先做存在性判断,防止类似错误:
<% if (usersWithSecrets && usersWithSecrets.length) { %> <% usersWithSecrets.forEach(function(user){ %> <p class="secret-text"><%=user.secret%></p> <% }) %> <% } %>
内容的提问来源于stack exchange,提问作者Md Fajle Rabby
相关产品推荐
相关产品推荐

