check if user name and email in database using expressJS

19,464

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.

Share:
19,464
Admin
Author by

Admin

Updated on June 05, 2022

Comments

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