#javascript #node.js #validation #mongoose
#javascript #node.js #проверка #Мангуст
Вопрос:
У меня есть код, в котором я обновляю свой объект схемы с помощью тела запроса. Я применил правила проверки к схеме. Проблема в том, что я хочу, чтобы схема выдавала ошибку, когда в теле запроса есть несуществующее поле. Несуществующий ключ не сохраняется в базе данных, как я хочу, но я хочу выдать некоторую ошибку вместо сохранения объекта. Схема:
const peopleSchema = new mongoose.Schema(
{
fullname: {
type: String,
required: [true, "fullname is required"],
validate: [(value) => isAlpha(value, "en-US", {ignore: " "}), "name should be alphabetic only"],
},
phone: {
type: String,
validate: [isPhone, "please enter a valid phone number"],
},
address: String,
},
{ timestamps: true }
);
Код для обновления person:
router.put("/:id", checkUser, async (req, res, next) => {
try {
const { id } = req.params;
const user = req.currentUser;
const person = user.people.id(id);
person.set(req.body);
const response = await user.save();
res.json({ response });
} catch (err) {
next(new BadRequestError(err));
}
});
Комментарии:
1. Если проблема не решена, оставьте комментарий, если решена, примите мой ответ, спасибо
2. @MohammadYaserAhmadi хорошо, когда я его протестирую, я продолжу. Спасибо.
3. если ваша проблема решена, примите мой ответ
4. @MohammadYaserAhmadi, это не сработало. Но я делаю это так, как есть. Просто игнорируйте дополнительные поля и сохраните запись.
Ответ №1:
для проверки существует два способа, основанные на callback
и async
approache , поскольку ваш код основан на async / await, который вы должны использовать validateSync()
, как следующий код:
let errors = user.validateSync()//check validation
if(errors){
console.log(errors)
throw errors;//handle your error
}
const response = await user.save()
в методе обратного вызова :
user.save(function(err,response){
if (err){
console.log(err);
//handle error
}
else{
console.log(response)
res.json({ response });
}
})