我写取数据,并将其存储到数据库的API,也对其进行编辑和删除它,添加/删除的作品很好,但是当我更新我想只能更新某些属性,并且如果用户不发送属性,我希望代码将数据保存在数据库中。相反,如果我不发送属性,它将被空数据覆盖。添加/编辑/删除API,用户更新数据将覆盖在DB数据的NodeJS快递猫鼬
下面是一个例子:
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"});
}
});
}
});
});
猫鼬将不会触发它是在模型验证,如果您使用此方法,请确保你在这种情况下,手动验证。 – Paul
@Paul我使用一个额外的模块来解决验证问题,并在定义模式时使用它。那有什么问题?不值得赞扬,是吗?! –
这是值得您的解决方案的主要文本,他目前的做法会(即使用'.save()''副findOneAndUpdate()')你所建议的解决方案不包括行为这方面提。我没有因为使用额外的模块而失望;您在解决方案中没有提及它。 – Paul