mongoose返回函数查询数据库
编辑
我设法做到了。 我用了很棒的asynchronous模块。 以下是解决scheme:
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"); } });
题
我的情况如下。 我正在向db控制器发出一个post请求,以便在db中创build一个文档。 这个请求显然包含来自表单的数据,存储在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计数有多less文件在数据库中有给定的ID,如果答案是零,该字段不包含有效的值,该函数返回false。 否则,它应该返回true。
问题是所有对数据库的调用都是asynchronous的,因此在检查所有用户的ID之前,函数返回true。
我想到使用承诺,但我不知道从哪里开始。 有没有人有任何想法或build议?
提前致谢! 干杯。 🙂
所以你想要做的是检查每个给定的idUser是否可以。
在我的例子中,我执行一个请求,它将返回每个拥有req.body.users
中的id的req.body.users
。
然后检查我想检查的用户数是否与我获得数据的用户数相同。 如果不匹配,则意味着我们有一个不在数据库中的idUser。
User.find({ _id: { $in: req.body.users, }, }, '_id') .then((rets) => { if (rets.length !== req.body.users.length) { // // /!\ Unknown idUser // throw new Error('...'); } // All is alright }) .catch((err) => { ... });
在我的例子中,我使用了Promise
对象和投影
- 快速error handling和asynchronous等待
- 在循环中调用asynchronous函数时,Node.JS如何处理循环控制?
- 在node.js中使用嵌套for循环内的Promise
- 可以有很多function(超过10)来处理Node的asynchronous性质(特别是在添加到MySql数据库时)
- NodeJS与mysql的asynchronous令我感到困惑
- 在返回之前等待asynchronous完成
- 如何在node.js + Express.js + mongodb应用程序上asynchronous启动摩卡testing
- 调用可变数量的函数并行?
- 为什么不能stream行的JavaScript运行时处理同步的asynchronous脚本?