2016-08-08 17 views
0

Wie kann ich feststellen, ob der Benutzername oder die E-Mail in diesem Szenario in der Mongo-Datenbank gefunden wurde? Ich benutze $or: [ { 'username': req.body.username}, {'email': req.body.email}], um einen vorhandenen Benutzernamen oder eine E-Mail zu finden, aber ich muss wissen, welcher gefunden wurde, damit ich eine Nachricht an den Client senden kann, um zu sagen, dass der Benutzername genommen oder die E-Mail genommen wurde. Ich habe versucht, die Variable "user" zu protokollieren, aber es hat das Objekt zurückgegeben, wenn es die Übereinstimmung gefunden hat.

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

Antwort

2

Wie wäre es mit pre validate Haken für einzigartige email und username validieren.

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

Ich lief in diesem Fehler User.pre ('validate', true, Funktion validateUniqueEmail (true, getan) { ^^^^ Syntaxerror: unerwartete Zeichen wahr, es ist nicht das Token erkennen wahr –

+0

Bitte beachten Sie die Bearbeitung, ich machte Fehler beim Binden – Lekhnath

+0

Ich bin mir nicht sicher, wenn Sie Fehler für eine gesunde Situation zurückgeben wird es funktionieren oder nicht und Evne Wenn es funktioniert, ist es nicht freundliche Methode – enRaiser

0

Sie können einfach das Benutzerobjekt verwenden, das gefunden wird.

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