NodeJS把数组放在MongoDB中doc.validate不是一个函数

我正在尝试通过NodeJS将对象数组推入MongoDB。

所以我的模式

var UserSchema = new mongoose.Schema({ id: mongoose.Schema.ObjectId, added: { type: Date, default: Date.now() }, displayName: String, login: String, email: String, phone: String, password: String, salt: String, role: Number, hasPremium: Boolean, avatar: Buffer, description: String, additional: [{ name: String, data: String }], cart: [{ exposition: Object, offer: Object, state: Number, history: [{ date: Date, state: Number, modifier: Number }] }], balance: Number, topUps: [{ orderNumber: String, sum: Number, added: Date, paid: Date }], lock: Boolean }); 

我的保存控制器

 module.exports = function (passport) { passport.use('signup', new LocalStrategy({ passReqToCallback: true // allows us to pass back the entire request to the callback }, function (req, username, password, done) { findOrCreateUser = function () { // find a user in Mongo with provided username UserModel.findOne({'login': username}, function (err, user) { // In case of any error, return using the done method if (err) { console.log('Error in SignUp: ' + err); return done(err); } // already exists if (user) { console.log('User already exists with username: ' + username); return done(null, false, req.flash('message', 'User Already Exists')); } else { // if there is no user with that email // create the user var newUser = new UserModel(); // set the user's local credentials newUser.displayName = req.param('displayName'); newUser.login = username; newUser.password = createHash(password); newUser.email = req.param('email'); newUser.phone = req.param('phone'); newUser.role = req.param('role'); newUser.description = req.param('description'); if (req.param('avatar')) { var avatar = new Buffer(req.param('avatar')).toString('base64'); newUser.avatar = new Buffer(avatar, 'base64'); } var adds = req.param('additional'); console.log(adds); if (adds) { newUser.additional = []; for (var i = 0; i < adds.length; i++) { newUser.additional[i] = {}; newUser.additional[i].name = adds[i].name; newUser.additional[i].data = adds[i].data; } } console.log(newUser.additional); // save the user newUser.save(function (err) { if (err) { console.log('Error in Saving user: ' + err); throw err; } console.log('User Registration succesful'); return done(null, newUser); }); } }); }; // Delay the execution of findOrCreateUser and execute the method // in the next tick of the event loop process.nextTick(findOrCreateUser); }) ); // Generates hash using bCrypt var createHash = function (password) { return bCrypt.hashSync(password, bCrypt.genSaltSync(10), null); } } 

所以,当我运行这个代码时,我得到了奇怪的错误

 TypeError: doc.validate is not a function 

即使我没有在我的计划validation。

我究竟做错了什么?

谢谢

OMG,我不知道发生了什么,但是当我这样做的时候

 newUser.additional = req.param('additional'); 

对这部分代码感兴趣

 if (adds) { newUser.additional = []; for (var i = 0; i < adds.length; i++) { newUser.additional[i] = {}; newUser.additional[i].name = adds[i].name; newUser.additional[i].data = adds[i].data; } } 

它工作完美。 对我来说还是有魔力的…