私は個人的なプロジェクトを作成しています。 、mongo、パスポート、ノードjsを使ってユーザーのプロフィールを更新するには?
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/');
}
});
私はそれを実行すると:私はな認証のためのPassport.jsを選択し、私はこのマングーススキーマを使用してユーザーのプロファイルを更新したいと思います:
ここ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}});
、私が使用ポストルートを私は、エラーを持っていると私は、この行をコメントすると、ユーザー名のみが更新されている理由
TypeError: Cannot set property 'email' of undefined
user.local.email = emailEdit;
のために理解していません。
私はそれが愚かな間違いだと確信していますが、私はそれを見つけることができません。
また、パスポート、ノード、mongoを使用してプロファイルを更新するより効率的な方法を探しています。可能であれば、たとえば、ユーザー名がまだ取得されていないかどうかをリアルタイムでチェックし、この場合はフィールドを赤で設定することができます。
...なぜ検証前に更新していますか?通常、更新する前に検証します。そして 'lenght'のようなものはありません。 – Mikey
@Mikeyあなたは正しいです。私はほとんど変更を進めません。私は更新します。それは動作しますが、私はより効率的な方法があると確信しています。 – phenric