データを取り込んでDBに格納し、編集して削除するAPIを作成しています。私は特定の属性だけを更新できるようにしたいと思っています。ユーザーが属性を送信しない場合、コードはDBに既にデータを保存しておきたいと思います。代わりに、属性を送信しないと空のデータで上書きされます。ここでapiを追加/編集/削除すると、ユーザーの更新データがDBノードのデータを上書きする
は例です:
router.post('/update', function (req, res) {
var first_name = req.body.first_name,
last_name = req.body.last_name,
email = req.body.email,
phone_number = req.body.phone_number,
clas = req.body.clas,
subject = req.body.subject,
teacher_id = req.body.teacher_id;
req.assert('teacher_id', 'Invalid teacher_id').notEmpty();
var errors = req.validationErrors();
if (errors) {
res.json(400, {success: false, message: "please enter your teacher_id "});
return;
}
Teacher.findOne({_id: teacher_id}, function (err, teacher) {
if (err) {
console.log(err);
} else {
teacher.first_name = first_name != null || first_name
!= undefined ? first_name : teacher.first_name;
teacher.last_name = last_name != null || last_name
!= undefined ? last_name : teacher.last_name;
teacher.email = email != null || email
!= undefined ? email : teacher.email;
teacher.phone_number = phone_number != null || phone_number
!= undefined ? phone_number : teacher.pickup_points;
teacher.clas = clas != null || clas
!= undefined ? clas : teacher.clas;
teacher.subject = subject != null && subject
!= undefined ? subject : teacher.subject;
teacher.save(function (err, teacher) {
if (err) {
console.log(err);
} else {
res.json({success: true, message: "teacher successfully updated"});
}
});
}
});
});
このメソッドを使用する場合、Mongooseはモデルの検証を実行しません。この場合、手動で検証してください。 – Paul
@Paul私は検証の問題に対処するために1つの余分なモジュールを使用し、スキーマを定義する際に使用するようにします。それのどこが悪いんだい? downvoteの価値がない、それとも? –
解決策の主なテキストには、現在のアプローチ(つまり、 '.save()' vice '、 'findOneAndUpdate()')を使用する動作の側面が含まれていないことに言及する価値があります。私は余分なモジュールを使用してあなたをdownvoteしませんでした。あなたはあなたの解決策にそれについて言及しませんでした。 – Paul