2016-08-08 3 views
0

Как я могу определить, было ли имя пользователя или адрес электронной почты в этом сценарии тем, что было найдено в базе данных монго. Я использую $or: [ { 'username': req.body.username}, {'email': req.body.email}], чтобы найти существующее имя пользователя или адрес электронной почты, но мне нужно знать, какой из них был найден, чтобы я мог отправить сообщение клиенту, чтобы сказать, что имя пользователя принято или отправлено по электронной почте. Я попытался зарегистрировать переменную «user», но он вернул объект, если он нашел совпадение.

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

ответ

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(); 

    }); 


}); 
+0

Я столкнулся с этой ошибкой, User.pre ('Подтвердить', правда, функция validateUniqueEmail (правда, сделано) { ^^^^ SyntaxError: Неожиданный токен правда, он не признает маркер истинного –

+0

см. Редактирование, я совершил ошибку, завязывая – Lekhnath

+0

Я не уверен, когда вы возвращаетесь Ошибка для здоровой ситуации. Будет ли это работать или нет. И Evne ЕСЛИ это работает, его не дружелюбный метод. – enRaiser

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); 
    } 
}); 
Смежные вопросы