javascript – ValidationError:MongooseError.ValidationError上的用户验证失败

前端之家收集整理的这篇文章主要介绍了javascript – ValidationError:MongooseError.ValidationError上的用户验证失败前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试使用mongoDb创建一个带有护照本地身份验证的简单node.js应用程序并将其表达为框架,但我遇到了问题

每当我尝试使用注册表单将数据提交到数据库中时,在单击提交后,它立即显示在节点终端中:

这是我的用户架构的样子:

var mongoose = require('mongoose');
var bcrypt   = require('bcrypt-nodejs');

// define the schema for our user model
var userSchema = mongoose.Schema({

    local            : {
        name    : String,username     : String,mobile       : Number,email        : String,gender       : String,password     : String

    }
});

// methods ======================
// generating a hash
userSchema.methods.generateHash = function(password) {
    return bcrypt.hashSync(password,bcrypt.genSaltSync(8),null);
};

// checking if password is valid
userSchema.methods.validPassword = function(password) {
    return bcrypt.compareSync(password,this.local.password);
};

// create the model for users and expose it to our app
module.exports = mongoose.model('User',userSchema);

和我的路由器文件

// process the signup form
    app.post('/signup',passport.authenticate('local-signup',{
        successRedirect : '/profile',// redirect to the secure profile section
        failureRedirect : '/signup',// redirect back to the signup page if there is an error
        failureFlash : true // allow flash messages
    }));

注册逻辑的护照配置:

passport.use('local-signup',new LocalStrategy({

    nameField     : 'name',usernameField : 'username',mobileField   : 'mobile',emailField    : 'email',genderField   : 'gender',passwordField : 'password',passReqToCallback : true // allows us to pass back the entire request to the callback
},function(req,name,username,mobile,email,gender,password,done) {

    // asynchronous
    // User.findOne wont fire unless data is sent back
    process.nextTick(function() {

    // find a user whose email is the same as the forms email
    // we are checking to see if the user trying to login already exists
    User.findOne({ 'local.email' :  email },function(err,user) {
        // if there are any errors,return the error
        if (err)
            return done(err);


        // check to see if theres already a user with that email
        if (user) {
            return done(null,false,req.flash('signupMessage','That email is already taken.'));
        } else {

            // if there is no user with that email
            // create the user
            var newUser            = new User();

            // set the user's local credentials
            newUser.local.name     = name;
            newUser.local.username = username;
            newUser.local.mobile   = mobile;
            newUser.local.email    = email;
            newUser.local.gender   = gender;
            newUser.local.password = newUser.generateHash(password);

            // save the user
            newUser.save(function(err) {
                if (err)
                    throw err;

                return done(null,newUser);
            });
        }

    });

    });

}));

我是node.js以及mongoDb的新手,请帮帮我
谢谢

解决方法

原因:此错误背后的原因是存储在db中的无效类型.就像移动设备是数字类型,但如果您传递的值不能转换为数字,那么它将给出相同的错误.

的console.log(NEWUSER);在保存用户并检查您在移动字段中传递的值之前,可转换为Number,因为其数据类型是架构中的数字.

如果移动设备为“”或未定义或为空,即不能转换为数字,那么它将无法工作.如果该值不存在,则从对象中删除该键.不要传递undefined,null或“”或字符串(不能转换为数字).

猜你在找的JavaScript相关文章