执行Mongoose Find查询时打印结果异常,求助获取关联工单用户信息
解决Mongoose异步查询获取关联工单数据的问题
你的核心问题是Mongoose的find()是异步操作,直接把TicketDetails.find()赋值给tickets,得到的是Mongoose的Query对象(不是实际查询结果),所以console.log输出的是Query实例而非工单数据。
修复方案1:使用回调嵌套
把工单查询放在项目查询的回调里,通过回调获取实际数据后再渲染页面:
app.get("/posts/:postId", isLoggedIn, function(req, res) { const requestedPostId = req.params.postId; ProjectDetails.findOne({_id: requestedPostId}, function(err, post) { if (err) return console.error(err); // 传入回调获取工单数据 TicketDetails.find({project: post.title}, function(err, tickets) { if (err) return console.error(err); console.log(tickets); // 现在能拿到实际工单数组 // 把tickets传给ejs模板 res.render("post", { title: post.title, content: post.content, tickets: tickets }); }); }); });
修复方案2:使用async/await(更简洁)
将路由函数改为异步函数,用await等待异步查询完成:
app.get("/posts/:postId", isLoggedIn, async function(req, res) { try { const requestedPostId = req.params.postId; const post = await ProjectDetails.findOne({_id: requestedPostId}); const tickets = await TicketDetails.find({project: post.title}); console.log(tickets); res.render("post", { title: post.title, content: post.content, tickets: tickets }); } catch (err) { console.error(err); // 这里可以添加错误处理逻辑,比如返回404页面 } });
在post.ejs中展示指派用户
拿到tickets数组后,在模板里遍历即可展示所有指派用户:
<h2>关联工单的指派用户</h2> <ul> <% tickets.forEach(ticket => { %> <li><%= ticket.username %></li> <!-- 这里的username对应你TicketDetails Schema里的字段名 --> <% }) %> </ul>
内容的提问来源于stack exchange,提问作者Lex_X
相关产品推荐
相关产品推荐

