使用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
相关产品推荐
相关产品推荐

