1

こんにちは、Stackoverflow コミュニティ。

Post 入力が mongodb に保存される登録プロセスを作成しようとしています。ユーザーのメールアドレスがデータベースに既に存在するかどうかを検証する前に。

db.users.find() ステートメントで変数を定義しようとすると、アプリは機能しません。

 app.post("/sign-up", function(req, res){

    var validate;

    db.users.find({email : req.body.email}, function(err, users) {
      if( err || !users){
                    validate = true;
      }else{
            validate = false;
            }
    });

    console.log(validate);

    if(validate == true){
            db.users.save({
                           title: req.body.title,
                           firstname: req.body.firstname,
                           surname: req.body.surname,
                           country : req.body.country,
                           email: req.body.email,
                           password: bcrypt.hashSync(req.body.password, 10)
                                       }, 
                           function(err, saved) {
                                              if( err || !saved ) console.log("User not saved");
                                              else console.log("User saved");
                                              res.location("sign-up-success");
                                              // And forward to success page
                                              res.redirect("sign-up-success");
                                            });
             }
 });

db.users.find() 関数がどのように見える必要があるか、db.users.save() 関数に対して if/else 要求を行うことができます。

4

2 に答える 2

2

問題は、db.users.findが非同期関数であることです。次のことを提案します。

app.post("/sign-up", function(req, res){
  var validateUser = function(callback) {
    db.users.find({email : req.body.email}, function(err, users) {
      if( err || !users){
        callback(true);
      } else {
        callback(false);
      }
    });
  }
  validateUser(function(isValid) {
    if(isValid == true){
      db.users.save({
        title: req.body.title,
        firstname: req.body.firstname,
        surname: req.body.surname,
        country : req.body.country,
        email: req.body.email,
        password: bcrypt.hashSync(req.body.password, 10)
      }, function(err, saved) {
        if( err || !saved ) console.log("User not saved");
        else console.log("User saved");
        res.location("sign-up-success");
        // And forward to success page
        res.redirect("sign-up-success");
      });
    }
  })
 });
于 2014-01-07T10:09:48.513 に答える