我的问题是检查数据库中是否已存在员工的姓名或电子邮件。他们说在预更新中间件中做到这一点很好。我试过了,但它没有用。
我将(id_of_staff,updatedStaff_info和callback_function)传递给更新函数。
这是我的更新功能:
module.exports.updateStaff = function(id, updatedStaff, callback){
var query = {_id: id};
Staff.update(query, updatedStaff, callback);
}
每次调用Staff.update()时,都会执行预更新中间件。我想要的是检查名称或电子邮件是否已存在。问题是,似乎未更新预更新中间件中的名称和电子邮件。
我的预更新中间件:
staffSchema.pre("update", function(next){
var staff = this;
Staff.find({_id:{$ne: staff.id}, $or:[{name: staff.name}, {email: staff.email}]}, function (err, docs) {
if (!docs.length){
next();
}else{
next(new Error("Name or email already exist"));
}
});
});
我得到的结果总是"姓名或电子邮件已经存在"。我试图在控制台日志中打印staff.name的值,但它表示未定义。我做得对吗?你能帮我搞定吗?非常感谢你们。
答案 0 :(得分:0)
我找到了解决问题的方法。我只是创建一个函数来检查名称或电子邮件是否已经存在,而不是使用预更新中间件。
以下是代码:
module.exports.updateStaff = function(id, updatedStaff, callback){
var query = {_id: id};
//check name and email if already available
function updateStaff(id, updatedStaff, callback){
//get staff that has the same name or email
Staff.find({_id:{$ne:id}, $or:[{name: updatedStaff.name}, {email_pc: updatedStaff.email_pc}]}).exec(
function(err, result){
console.log(result);
if(!err){
if(result.length){
console.log("Name or email already exist.");
callback("Conflict", null);
}
else{
//udpate the staff
Staff.update(query, updatedStaff, callback);
}
}else{
callback(err);
}
})
}
updateStaff(id, updatedStaff, callback);
}
但我仍然愿意使用预更新中间件来回答。谢谢:))