ValidationError:用户validation在MongooseError.ValidationError失败

我正在尝试创build一个简单的node.js应用程序与使用mongoDb护照本地身份validation,并表示为一个框架,但我有一个问题

每当我尝试使用registry单将数据提交到数据库时,点击提交后立即出现在节点terminal: 节点终端

这里是我的用户架构如何看起来像:

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

注册逻辑的护照configuration:

  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请帮我
谢谢

原因:这个错误背后的原因是存储在数据库中的无效types。 像手机是数字types,但如果你传递一个值不能转换为数字,那么它会给出相同的错误。

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

如果移动是“”或未定义或null,即不能转换为数字,那么它将无法正常工作。 如果该值不存在,则从对象中移除该键。 不要传递undefined,null或“”或string(不能转换为数字)。