【发布时间】:2017-12-14 08:49:42
【问题描述】:
我正在创建一个个人项目。我选择Passport.js进行身份验证,我想使用此Mongoose架构更新用户的个人资料:
var userSchema = mongoose.Schema({
local : {
email : {type: String, required: true, unique: true},
password : {type: String, required: true}
},
first_name : {type: String, required: true},
last_name : {type: String, required: true},
username : {type: String, required: true, unique: true},
email : {type: String, required: true, unique: true}});
这里是我使用的 post 路由:
app.post('/editProfile', isLoggedIn, function(req, res, next){
User.update({ _id: req.user.id}, req.body, function(err, user){
if(!user){
req.flash('error', 'No account found');
return res.redirect('/edit');
}
var emailEdit = req.body.email;
var usernameEdit = req.body.username;
var first_nameEdit = req.body.firstname;
var last_nameEdit = req.body.lastname;
if(emailEdit.lenght <= 0 || usernameEdit.lenght <= 0 || first_nameEdit.lenght <= 0 || last_nameEdit.lenght <= 0){
req.flash('error', 'One or more fields are empty');
res.redirect('/edit');
}
else{
user.email = emailEdit;
user.local.email = emailEdit;
user.first_name = first_nameEdit;
user.last_name = last_nameEdit;
user.username = usernameEdit;
res.redirect('/profile/');
}
});
当我运行它时,我有一个错误,我不明白为什么
TypeError:无法设置未定义的属性“电子邮件”
因为user.local.email = emailEdit; 当我评论这一行时,只有用户名被更新。
我确定这是我犯的一个愚蠢的错误,但我找不到它。
我还在寻找一种最终更有效的方法来使用护照、节点和 mongo 更新配置文件。如果可能的话,一个动态的,例如,如果尚未使用用户名,我可以实时检查并在这种情况下将该字段设置为红色。
【问题讨论】:
-
嗯...为什么在验证之前更新?您通常在更新之前进行验证。而且没有
lenght这样的属性。 -
@Mikey 你说得对,我进行了一些更改。我会更新。它有效,但我确信有更有效的方法。
标签: node.js mongodb mongoose passport.js