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

使用PUG展示MongoDB用户集合数据时遇数组未定义错误

问题:MongoDB数据无法渲染到PUG模板,提示数组未定义

问题背景

我尝试从MongoDB的users集合中获取数据,并通过PUG模板展示,但遇到了users数组未定义的错误。

相关代码片段

控制器中的GET路由

router.get('/adminPanel', (req, res) => {
    try{
        const userArr = userModel.getAllUsers();
        res.render('adminPanel', { users: userArr });
    }
    catch(err){
        console.log(err);
    }
});

PUG模板(adminPanel.pug)

table
  thead 
    tr 
      th User ID 
      th Username
      th Admin
  tbody
    if users 
      each user in users
        tr 
          td= user.id 
          td= user.username
          td= user.isAdmin
    else 
      tr 
        td(colspan='3') No users found

调试过程

我在NodeJS MVC架构的app.js中已导入并挂载该控制器,但修改GET方法后问题仍未解决。于是在控制器中编写测试函数调试:

function test(){
    const users = userModel.getAllUsers();
    console.log(users);
}

test();

测试函数能在控制台输出预期数据,但数据无法渲染到PUG模板中。我猜测可能是PUG在数据库查询完成前就加载,导致读取到未定义的数组。

补充信息:用户模型方法定义

async function getAllUsers() {
    try {
        const users = await userModel.find().select("_id username isAdmin");
        console.log(users);
        return users;
    } catch (err) {
        console.log(err);
    }
}

问题解决

最终定位到两个错误:

  • 异步调用未等待结果:调用getAllUsers()这个异步函数时未使用await,导致userArr是未解析的Promise,而非实际用户数据,模板自然无法获取有效数组。
  • 路由挂载路径错误:原挂载代码为:
app.use("/user", userController);

修改为正确路径后,路由能正确匹配并传递数据:

app.use("/adminPanel", userController);

内容的提问来源于stack exchange,提问作者RAD140

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 16:35:04