Node.js 如何从mongoose find外部返回列表值
我使用MongoDB数据库处理任务,我试图找到所有任务等级为“OK”的任务,并将结果放入一个列表,所有任务等级为“NOK”的任务放入第二个列表,最后将其作为两个信息列表呈现到我的HTML中 问题是,当我想将查找结果作为列表返回到外部值时,它总是返回一个奇怪的Mongoose对象 我的代码:Node.js 如何从mongoose find外部返回列表值,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我使用MongoDB数据库处理任务,我试图找到所有任务等级为“OK”的任务,并将结果放入一个列表,所有任务等级为“NOK”的任务放入第二个列表,最后将其作为两个信息列表呈现到我的HTML中 问题是,当我想将查找结果作为列表返回到外部值时,它总是返回一个奇怪的Mongoose对象 我的代码: app.get("/", function(req, res) { var nok_l = tasks.find({ task_rating: "NOK" }, (err, nokTasks) =&g
app.get("/", function(req, res) {
var nok_l = tasks.find({ task_rating: "NOK" }, (err, nokTasks) => {
if (err)
console.log(err);
else {
return nokTasks;
}
});
var ok_l = tasks.find({ task_rating: "OK" }, (err, okTasks) => {
if (err)
console.log(err);
else {
return okTasks;
}
});
console.log(ok_l);
res.render("tasks", {
ok_l: ok_l,
nok_l: nok_l
});
});
console.log打印的结果是Mongoose的werid对象,而不是我的列表
谢谢。问题是您打印的是猫鼬的promise对象,而不是返回的数据,因为该对象是异步的 处理这种情况的方法有很多,但最基本和“教诲性”的方法是在承诺得到解决时只返回数据:
app.get("/", function(req, res) {
tasks.find({task_rating: "NOK"}, (err, nokTasks) => {
if (!err) {
tasks.find({task_rating: "OK"}, (err, okTasks) => {
if (!err) {
res.render("tasks", {
ok_l: okTasks,
nok_l: nokTasks
});
}
});
}
});
});
但是,如果我们存储promises引用并使用以下方法解决所有问题,则此堆栈的结构会更好:
非常感谢。它起作用了!有一个更“优雅”的解决方案来处理这个场景吗?如果我有十个列表,我必须在另一个列表中找到十个(Hey@GuyCohen,我用更好的方法更新了答案;)
app.get("/", function(req, res) {
let promises = [];
promises.push(tasks.find({task_rating: "NOK"}).exec());
promises.push(tasks.find({task_rating: "OK"}).exec());
Promise.all(promises).then( (allTasks) => {
// here it's necessary to handle the "OK" and "NOK" lists
res.render("tasks", {
list: allTasks
});
});
});