【发布时间】:2018-05-08 13:03:07
【问题描述】:
编辑
我已经做到了。我使用了很棒的异步模块。以下是解决方案:
async.each(req.body.users, function(userId, next) {
User.count( { _id: userId } ).exec(function(err, count) {
if(count === null) {
next("Doesn't exist);
} else {
next();
}
}, function(err) {
if(err) {
console.log(err);
} else {
console.log("success");
}
});
问题
我的情况如下。我正在向数据库控制器发出发布请求,以便在数据库中创建一个文档。这个请求显然包含来自表单的数据,存储在 req.body 中。我想在将数据推送到数据库之前检查数据是否正确,我通过调用函数来检查它。
其中一个字段是 user._id 的数组,我想检查所有这些是否都属于某个用户。
我的实现方式如下:
req.body.users.forEach(function(userId) {
User.count({ _id: userId }).exec(function(err, count) {
if(count === 0) {
return false;
}
}
}
return true;
所以基本上,我调用 mongoose 来计算 db 中有多少文档具有给定的 id,如果答案为零,则该字段不包含有效值并且函数返回 false。否则,它应该返回 true。
问题是对数据库的所有调用都是异步的,因此该函数在检查所有用户的 id 之前返回 true。
我想过使用 Promise,但我不知道从哪里开始。 有人有什么想法或建议吗?
提前致谢! 干杯。 :)
【问题讨论】:
-
是的,使用承诺。
标签: javascript node.js asynchronous mongoose