我有一个小项目介绍自己的一些前端技术。我正在使用Node,Express,Pug和MongoDB。
我在user.js文件中定义用户架构:
var userSchema = mongoose.Schema({
username : String,
password : String,
jobs : [{ type: mongoose.Schema.Types.Mixed }]
});
然后,在我的passport.js文件中,我开始注册过程。
User.findOne({ 'username' : username }, function(err, user) {
// if there are any errors, return the error
if (err) {
console.log(err);
return done(err);
}
// check to see if theres already a user with that email
if (user) {
console.log('user exists');
return done(null, false, req.flash('signupMessage', 'That username is already taken.'));
} else {
console.log('creating new user...');
// if there is no user with that email
// create the user
var newUser = new User();
newUser.username = username;
newUser.password = newUser.generateHash(password);
newUser.jobs = [{ website: 'google.com' }];
// save the user
newUser.save(function(err) {
if (err) {
console.log(err);
throw err;
}
console.log('user saved: ', newUser);
return done(null, newUser);
});
}
});
该帖子成功将新用户保存为:
{
"_id": {
"$oid": "5967d2acc64d953330a3ac32"
},
"__v": 0
}
我的目标是在数据库中有一个数组,可以将网站链接推送到该用户的数组中。
感谢您的帮助。
答案 0 :(得分:1)
将作业字段类型设置为混合数组:
var userSchema = mongoose.Schema({
local: { username : String, password : String },
jobs: [ { type: mongoose.Schema.Types.Mixed } ]
});
然后创建将所有参数传递给构造函数的用户:
var newUser = new User({
local: {
username: username,
password: User.generateHash(password),
},
jobs: [{ website: 'google.com' }]
});
// save the user
newUser.save(function(err) {
if (err) {
console.log(err);
throw err;
}
console.log('user saved: ', newUser);
return done(null, newUser);
});
您还可以在不首先实例化的情况下创建用户:
// save the user
User.create({
local: {
username: username,
password: User.generateHash(password),
},
jobs: [{ website: 'google.com' }]
}, function(err, newUser) {
if (err) {
console.log(err);
throw err;
}
console.log('user saved: ', newUser);
return done(null, newUser);
})
对于这两种方法,您可能需要将generateHash
设为static method。