2014-01-07 38 views
1

你好社区#1, 我是新来的Node.js /快递,我需要你的帮助,因为我停留在一些问题。的Node.js(快递,mongodb的)注册过程

我试图做一个注册过程,其中后输入保存到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()函数/其他请求。

+1

你的缩进看起来很乱。我建议你先解决它。 –

回答

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"); 
     }); 
    } 
    }) 
}); 
+0

你的代码看起来优雅:>,怎么样,如果只是写'回调(ERR | |!用户)' – damphat

+0

是的,这也会工作(Y)。 – Krasimir

1

这是异步的问题,你可以将一些代码到你发现的回调是这样的:

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; 
     } 

     // your code should be here: 
     console.log(validate); 

     if(validate == true){ 
     .... 
     } 

    }); 


    // This code will print undefined, so you must move to the callback 
    // console.log(validate) 
    // because the callback was not call yet 
+0

感谢您需要稍后对其进行测试,以便更好地理解:如果代码不在回调中,您可以告诉我为什么代码将打印为undefined的原因? – lhadameck

+1

,因为它是异步的,'db.users.find()'不会停下来等待结果 – damphat

+0

谢谢,我认为这增加了我对node.js的一般理解。 所以我需要这样做每个异步功能? – lhadameck