gpt4 book ai didi

javascript - 验证错误 : User validation failed at MongooseError. 验证错误

转载 作者:IT老高 更新时间:2023-10-28 13:26:29 24 4
gpt4 key购买 nike

我正在尝试创建一个简单的 node.js 应用程序,使用 mongoDb 和 express 作为框架进行本地身份验证,但我遇到了问题

每当我尝试使用注册表将数据提交到数据库时,单击提交后它会立即出现在 Node 终端中: node 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
}));

注册逻辑的护照配置:

    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);在保存用户并检查您在移动字段中传递的值之前是否可以转换为数字,因为它的数据类型是架构中的数字。

如果 mobile 是 ""或 undefined 或 null 即不能转换为数字,那么它将不起作用。如果它的值不存在,则从对象中删除此键。不要传递 undefined、null 或 ""或字符串(不能转换为数字)。

关于javascript - 验证错误 : User validation failed at MongooseError. 验证错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39908206/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com