Ошибка выброса Мангуста при наличии несуществующего ключа

#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 });
      } 
 })