check if user name and email in database using expressJS
Solution 1
use find() function, this may give you perfect result
User.find({ 'username': username,'email':email }, function(err, user) {
if (err) {
console.log('Signup error');
return done(err);
}
//if user found.
if (user.length!=0) {
if(user[0].username){
console.log('Username already exists, username: ' + username);
}else{
console.log('EMAIL already exists, email: ' + email);
}
var err = new Error();
err.status = 310;
return done(err);
}
Solution 2
First you might want to add this to your schema to ensure all emails are lowercase, so comparison can make sense:
email: { type: String, set: toLower }
Where toLower is :
function toLower (str) {
return str.toLowerCase();
}
Then to lookup MongoDB for docs that matches a username or an email, you can use MongoDB $or
operator
So the query will be something like this:
User.find($or:[{username: username}, {email: email}]);
Since you're using mongoose, we can use the pre middleware, to validate docs before saving
So you're code could be something like this:
UserSchema.pre('save', function(next){
var user = this ;
User.find($or:[{username: user.username}, {email: user.email}],
function(err, users){
if(err) {
return next(err);
} else if(users) {
if (_.find(users , {email: user.email})){
user.invalidate('email', 'email is already registered');
next( new Error("email is already registered"));
}
else if (_.find(users , {username: user.username})){
user.invalidate('username', 'username is already taken');
next( new Error("username is already taken"));
}
}
else{
next();
}
})
})
This might not cover all the cases, and used lodash for simplicity and its awesomeness.
Admin
Updated on June 05, 2022Comments
-
Admin almost 2 years
I am trying to check if an email and an username in a database do already exist. Since I am using mongoose and express.js, I only checked if the username in a database already exists, but I need to check the email and username and return a suitable error message for each one. However, I don't know how to check them. Here are some of code that I wrote so far:
User.findOne({ 'username': username }, function(err, user) { if (err) { console.log('Signup error'); return done(err); } //if user found. if (user) { console.log('Username already exists, username: ' + username); var err = new Error(); err.status = 310; return done(err); }