使用ExpressJS检查数据库中的用户名和电子邮件。

3

我正在尝试检查数据库中是否已经存在电子邮件和用户名。由于我正在使用mongoose和express.js,因此我仅检查了数据库中的用户名是否已存在,但我需要检查电子邮件和用户名,并为每个返回适当的错误消息。然而,我不知道如何检查它们。以下是我迄今为止编写的一些代码:

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

            }
3个回答

9

首先您可能需要将以下内容添加到模式中,以确保所有电子邮件都是小写的,以便比较有意义:

email: { type: String, set: toLower } 

toLowerCase 是什么:

function toLower (str) {
    return str.toLowerCase();
}

如果要查找与用户名或电子邮件匹配的MongoDB文档,则可以使用 MongoDB $or 运算符

因此,查询将类似于以下内容:

User.find($or:[{username: username}, {email: email}]);

由于您正在使用mongoose,我们可以使用预处理中间件在保存文档之前对其进行验证。

因此,您的代码可能如下所示:

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

这可能并不涵盖所有情况,使用 lodash 是为了简便和它的强大功能。


0

使用find()函数,这可能会给你完美的结果。

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

        }

我需要检查数据库中的用户名和电子邮件,然后针对每个情况返回相应的结果。 例如: 如果用户输入了新的用户名和已存在的电子邮件,我需要告诉他该电子邮件已存在,并对用户名做类似处理。 - Ahmad Dogly
编辑代码以检查用户名或电子邮件地址是否存在,如果不存在,则将其打印在日志中,您可以根据需要进行设置。 - Muhammad Ali

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接