如何判断此方案中的用户名或电子邮件是否是在mongo数据库中找到的用户名或电子邮件。我使用$or: [ { 'username': req.body.username}, {'email': req.body.email}]
来查找现有的用户名或电子邮件,但我需要知道找到了哪个用户名或电子邮件,这样我就可以向客户端发送消息,说明用户名已被删除或是收到了电子邮件。我试图记录"用户"变量但它返回了对象,如果它找到了匹配。
User.findOne({
$or: [ { 'username': req.body.username}, {'email': req.body.email}]
}, function(err, user) {
if (user) {
console.log('username or password is taken');
} else {
userDetails.save(function(err) {
if (err) throw err;
});
}
if (err) {
return done(err);
}
});
答案 0 :(得分:2)
如何使用pre validate
个钩子来验证唯一的email
和username
。
User.pre('validate', true, function validateUniqueEmail( next, done) {
next();
User.findOne({email: this.email}).exec(function(err, user) {
if(err) {
return done(err);
}
if(user) {
return done(new Error('Email is taken'));
}
done();
});
});
User.pre('validate', true, function validateUniqueUsername( next, done) {
next();
User.findOne({username: this.username}).exec(function(err, user) {
if(err) {
return done(err);
}
if(user) {
return done(new Error('Username is taken'));
}
done();
});
});
答案 1 :(得分:0)
您只需使用找到的用户对象即可。
User.findOne({
$or: [ { 'username': req.body.username}, {'email': req.body.email}]
}, function(err, user) {
if (user) {
if(user.username == req.body.username){
console.log('username is taken');
}else{
console.log(' email is taken');
}
} else {
userDetails.save(function(err) {
if (err) throw err;
});
}
if (err) {
return done(err);
}
});