【问题标题】:Mongoose and Node error: cannot read property 'forEach' of undefinedMongoose 和 Node 错误:无法读取未定义的属性“forEach”
【发布时间】:2020-04-27 10:06:45
【问题描述】:

我想将 MongoDB 中的所有内容显示到 .ejs 文件中的表中。但我总是收到我在标题中写的错误..

这里是一些代码sn-p:

这是我的路由 js 文件 (users.js)

router.get ('/Benutzerverwaltung_Mitarbeiter', async (req, res) => {

    User.find(function (err, users) {

        // if there is an error retrieving, send the error.
        // nothing after res.send(err) will execute
        if (err)
            return res.send(err);
        res.json(users);
        res.render('Benutzerverwaltung_Mitarbeiter',{
            users: res.user
        });
    });
});

这是我的 .ejs 文件:

 <%- include('../routes/users.js'); %>
            <div>
                <table id="tabelle" class="cell-border"  class="table table-striped" cellspacing="0" class="table table-hover">
                    <thead>
                    <tr>
                        <th>UserID</th>
                        <th>Rolle</th>
                    </tr>
                    </thead>
                    <tbody>
                    <tr>
                    <% users.forEach (function (user) { %>
                    <td><%user.username%></td>
                    </tr>
                    <td><%user.admin%></td>
                    <%});%>
                    </tbody>
                </table>
                </div>

我希望你能帮助我:) 干杯,Mert

【问题讨论】:

  • res.user 来自哪里?也许你打算在上面做res.user = res.json(users);

标签: javascript node.js express mongoose ejs


【解决方案1】:

res.jsonres.render 都是“终端”方法 - 你真的应该只在“完成”时使用它们一次,而不是同时使用相同的方法。

我认为在这种情况下你试图返回 html,而不是 json,所以你想要res.render。试试这个修改:

User.find(function (err, users) {

    // if there is an error retrieving, send the error.
    // nothing after res.send(err) will execute
    if (err)
        return res.send(err);
    res.render('Benutzerverwaltung_Mitarbeiter',{
        users: users || []
    });
});

【讨论】:

  • 好的,成功了!谢谢!但是有一个问题..我在表格中看不到结果。你知道为什么吗?
  • 现在应该从这条路线返回 html。它是否出现在页面上取决于您如何到达路线。您是使用 ajax 获取它吗?
  • 那么,你打算在浏览器中输入localhost/Benutzerverwaltung_Mitarbeiter 吗?对我来说看起来很有趣的一行是在您的 ejs 文件中:&lt;%- include('../routes/users.js'); %&gt; - 我认为您不希望在那里。也许尝试删除它。您包含的任何文件都应该有更多的 html 或客户端脚本,而不是您的节点文件。
  • 是的,我正在浏览器中通过本地主机,是的,你是对的,我删除了它,但仍然不起作用:(
  • 这可能是很多事情。但首先,您可以打开您的开发工具并单击网络选项卡。在顶部附近,您应该会看到请求 /Benutzerverwaltung_Mitarbeiter。您可以单击它并查看返回的内容(使用“预览”或“响应”) - 查看您是否得到一个空表,或者其他样式等是否隐藏了您的内容。祝你好运!
【解决方案2】:

在 users.js 中,在 res.render 回调中,我在分配 users 属性时发现了一个错字。

如果应该保存数组的变量没有定义,数组原型函数总是会抛出上面的错误。

【讨论】:

  • 试试users: users
  • 现在我收到此错误错误 [ERR_HTTP_HEADERS_SENT]: 发送到客户端后无法设置标头
  • 我很确定 res.json() 行与 res.render() 冲突。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-12
  • 2021-01-08
  • 1970-01-01
  • 2023-03-28
  • 2021-10-21
  • 2021-11-24
  • 1970-01-01
相关资源
最近更新 更多