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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 00:31:39