Вы можете сделать адрес электронной почты и номер телефона уникальными (рекомендуется) и проверить наличие ошибок дублирования, обработанных mon goose.
email : {
type : String,
required : true,
unique : true // add unique option
},
phoneNo : {
type : Number,
required : true,
unique : true // add unique option
},
This package mon goose -unique-validator вернет поле, вызывающее ошибку дублирования. Но вы также можете справиться с ошибкой дублирования самостоятельно, как предлагается здесь , но вам нужно будет самостоятельно проверить индекс, чтобы увидеть, какое поле вызвало дублирование
Вышеупомянутые подходы будут обрабатывать ошибки дублирования, когда вы вставляете / обновляете документ, поэтому текущий код проверки вам не понадобится.
В целях улучшения процесса проверки, если вы хотите избежать вложенных обещаний, вы можете вызывать их одновременно, используя Promise.all()
/* without async/await */
Promise.all([
User.findOne({ email: req.body.email }).exec(),
User.findOne({ phoneNo: req.body.phoneNo }).exec()
]).then(([emailUser, phoneUser]) => {
if (emailUser) {
errors.email = "Email already exists";
return res.status(400).json(errors);
}
if (phoneUser) {
errors.phoneNo = "Phone no already exists";
return res.status(400).json(errors);
}
})
/* with async/await */
const [emailUser, phoneUser] await Promise.all([
User.findOne({ email: req.body.email }).exec(),
User.findOne({ phoneNo: req.body.phoneNo }).exec()
])
if (emailUser) {
errors.email = "Email already exists";
return res.status(400).json(errors);
}
if (phoneUser) {
errors.phoneNo = "Phone no already exists";
return res.status(400).json(errors);
}