javascript - 如何使用 promise 链接 Mongoose 查询?

标签 javascript node.js mongodb mongoose

嘿伙计们,我是初学者,我正在开发我的第一个express和mongo应用程序,但我不知道如何使用javascript promise 链接查询以使其作为同步查询工作。 请帮助我链接这些 Mongoose 查询。

 /* POST Register User  */
 router.post('/register',function(req,res,next){

let user = req.body;
//checking for empty field in a form
for(let key in user){
   if(user[key] === ""){
      return next(mid.error("All fields are required to fill"));
   }
}

User.findOne({username:user.username})
.exec(function(err,user){
    if(err){
        return next(mid.error("Something went wrong"));
    }
    if(user){
        return next(mid.error("Username already exist"));
    }
});

User.findOne({email:user.email})
    .exec(function(err,user){
        if(err){
           return next(mid.error("Something went wrong"));
        }
        if(user){
           return next(mid.error("Email already exist"));
        }
    });

  //matching password 
  if(user.password !== user.confirm){
     return next(mid.error("Password not matched.Try again !"));
  }

  //save data in object
  let userData = {
     username : user.username,
     email    : user.email,
     password : user.password
   };

  //save data in database

  User.create(userData,function(err,user){
   if(err){
      return next(mid.error("Something went wrong.Try again !!!"));
    } else {
       req.session.userID = user._id;
       return res.redirect('/home');
    } 

 });

 });

最佳答案

/* POST Register User  */
router.post('/register',function(req,res,next){

let user = req.body;
let validError = [];
//checking for empty field in a form
for(let key in user){
    if(user[key] === ""){
        return next(mid.error("All fields are required to fill"));
    }
}

let findUserName = () => {
 return new Promise(function(resolve,reject){
    User.findOne({username:user.username})
      .exec(function(err,user){
        if(err){
          validError.push("Something went wrong");
        }
        if(user){
          validError.push("Username already exist");
        }
          return resolve();
    });
});
}


let findUserEmail = () => {
  return new Promise(function(resolve,reject){
      User.findOne({email:user.email})
        .exec(function(err,user){
          if(err){
            validError.push("Something went wrong");
          }
          if(user){
            validError.push("Email already exist");
          }
            return resolve();
      });
  });
 }

let isPasswordMatch = () => {
  return new Promise(function(resolve,reject){
      if(user.password !== user.confirm){
        validError.push("Password not matched");
      }
      return resolve();
 });
}

 findUserName().then(findUserEmail).then(isPasswordMatch).then(() => {

   if(validError.length == 0){
       //save data in object
       let userData = {
         username : user.username,
         email    : user.email,
         password : user.password
       };

       //save data in database

       User.create(userData,function(err,user){
         if(err){
           return next(mid.error("Something went wrong.Try again !!!"));
         } else {
           req.session.userID = user._id;
           return res.redirect('/home');
         }

      });

    }else{
      return next(mid.error(validError[0]));
    }

  });


 }); 

终于自己做了!谢谢大家

关于javascript - 如何使用 promise 链接 Mongoose 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42546626/

相关文章:

javascript - 使用 node.js 的 Protocol Buffer - 无法从 .proto 生成 js

java - MongoDB-Java:如何使 $geoNear 首先进行查询,然后进行距离?

javascript - MongoDB 无法将 $addToSet 应用于 Meteor JS 中的非数组

javascript - 如何创建 jQuery 函数?

javascript - 你能在 HTML 标签上同时使用 async 和 defer 属性吗?

javascript - 尝试在 html 文件中实例化 JavaScript 类

python - 在 Node.js 服务器上运行 Python 脚本时出错

php - mongodb 聚合中空字段的投影

javascript - 使每个表单输入字段都唯一

javascript - 将 bool 复选框 ng-model 添加到对象 AngularJS