【发布时间】:2016-05-01 10:10:14
【问题描述】:
我通过在数组中推送错误消息来动态添加错误,但是当我在函数中调用它时它不执行任何操作。
router.post('/Registration',function(req,res){
var path = '/auth/Registration';
req.assert('username', 'Username is required').notEmpty();
req.assert('email', 'valid email required').notEmpty().isEmail();
req.assert('password', 'password is required').notEmpty();
req.assert('cpassword', 'password is required').notEmpty();
req.assert('phoneNumber', 'phone Number is required').isNumeric();
req.assert('age', 'age is required').notEmpty().isInt();
req.assert('designation', 'designation is required').notEmpty().isInt();
req.assert('timing', 'timing is required').notEmpty().notEmpty().isInt();
req.assert('sex', 'sex is required').notEmpty();
req.assert('joiningDate', 'joiningDate is required').notEmpty();
var errors = req.validationErrors();
if(errors) {
req.session.error = errors;
return res.redirect('/auth/Registration');
}
var errorsArr = [];
User.findOne({"username":req.body.username},function(err,user){
if(user){
errorsArr.push({"msg":"Username already been taken."});
}
User.findOne({"email":req.body.email},function(err1,user1){
if(user1) {
errorsArr.push({"msg":"Email already been taken."});
}
if(errorsArr.length > 0)
{
req.session.error = errorsArr;
return res.redirect('/auth/Registration');
}
});
});
var newUser = new User();
newUser.username = req.body.username;
newUser.password = req.body.password;
newUser.sex = req.body.sex;
newUser.email = req.body.email;
newUser.phoneNumber = req.body.phoneNumber;
newUser.age = req.body.age;
newUser.designation = req.body.designation;
newUser.timing = req.body.timing;
var CurrentDate = moment.tz(new Date(req.body.joiningDate),"Asia/Karachi").unix();
newUser.joiningDate = CurrentDate;
newUser.save(function(err,user){
if(!err)
return res.redirect('/auth/Login');
});
});
当我控制台 errorArray 时,它会显示一个空数组。
【问题讨论】:
-
代码是异步执行的,所以 "if(errorsArr.length > 0)" 被评估而不等待回调检查用户名和电子邮件。
-
是的,我应该怎么做才能检查这种情况?
-
你能给我举个例子吗?
-
今天可能是第 30 次出现关于不当使用异步操作的类似问题。
-
那么你能告诉我任何正确使用异步操作的链接或示例吗?这对我们有好处