Node.js Push方法不起作用,它只显示空数组
我通过在数组中推送错误消息来动态添加错误,但当我在函数中调用它时,它不会执行任何操作Node.js Push方法不起作用,它只显示空数组,node.js,express,mongoose,Node.js,Express,Mongoose,我通过在数组中推送错误消息来动态添加错误,但当我在函数中调用它时,它不会执行任何操作 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(); re
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
时,它会显示一个空数组。您可以通过使用promise$q或简单嵌套或回调来解决此问题
简单嵌套代码:
var errorsArr = [];
User.findOne({"username":req.body.username},function(err,user){
// you should check err
if(user){
errorsArr.push({"msg":"Username already been taken."});
}
User.findOne({"email":req.body.email},function(err1,user1){
// you should check err1
if(user1) {
errorsArr.push({"msg":"Email already been taken."});
}
console.log(errorsArr);
if(errorsArr.length > 0)
{
req.session.error = errorsArr;
return res.redirect('/auth/Registration');
}
});
});
看起来findOne函数正在执行一些数据库查询。我是这样假设的。如果是这样,那么它会返回一个承诺,而你不能这样处理它。 试试这个
代码是异步执行的,因此“如果(errorsArr.length>0)”在检查用户名和电子邮件时,在不等待回调的情况下进行评估。是的,那么我应该做什么来检查这种情况?你能给我举个例子吗?可能是今天第30次出现关于不正确使用异步操作的类似问题。那么,你能给我举个正确使用异步操作的链接或例子吗? 这对我们有好处,它会显示一个错误“\u http\u outgoing.js:335抛出新错误('发送后无法设置标题');^error:发送后无法设置标题”它仍然显示一个错误我已更新了注册的问题完整功能。请查看。谢谢我必须安装promise?不,您不需要。用户应该是您要查找的值。请在此处查看
User.findOne({"username":req.body.username}).then(function(user){
if(user){
errorsArr.push({"msg":"Username already been taken."});
}
}, function(err){
})