我正在嘗試更新 MongoDB 的用戶電子郵件,但我需要事先驗證此電子郵件是否尚不存在。在我的架構中,我有:
const UserSchema = new Schema({
fullName: { type: String, required: true },
email: { type: String, unique: true, required: true }
});
在我的控制器中:
exports.update = (req, res) => {
const entries = Object.keys(req.body);
const updates = {};
for (let i = 0; i < entries.length; i += 1) {
updates[entries[i]] = Object.values(req.body)[i];
}
const userId = req.body._id ? req.body._id : req.userId;
User.updateOne({ _id: userId }, { $set: updates }).exec((err, data) => {
if (err) {
res.status(500).send({ message: "Failed!" });
return;
}
if (data.n === 0) {
res.status(404).send({ message: "Not Found!" });
return;
}
res.status(200).send({ message: "Success!" });
});
};
它運行良好,但如果我輸入已使用的電子郵件,我會更新。我該如何預防?
由於您unique: true
在架構中使用,因此您可以更新該值,並且只有success
在它不重複時才會返回。
順便說一句,如果您想返回特定於email
存在的消息錯誤,您可以檢查錯誤是否是代碼11000
。
像這樣的東西:
User.updateOne({ _id: userId }, { $set: updates }).exec((err, data) => {
if (err) {
if(err.code === 11000){
return res.status(400).send({ message: "Uniques values already exists"});
} else {
return res.status(500).send({ message: "Failed!" });
}
}
if (data.n === 0) {
res.status(404).send({ message: "Not Found!" });
return;
}
res.status(200).send({ message: "Success!" });
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句