У файлі спочатку підключено сам пакет. У функцію передають дані для валідації. Їх згідно з документацією передають в метод validate. У метод keys ми передаємо обʼєкт з налаштуваннями валідації. У метод options передають налаштування валідації. Перевірка припиняється на першій же невідповідності, якщо ми хочемо перевірити всі параметри, то треба вказати налаштування: abortEarly: false.
А також в обробці створення контакту застосуємо перевірку. І при відпрацюванні коду виведемо в консоль параметри error і value, які повертає ця функція.
Але тепер ми можемо подивитися, що міститься в error і value.
Валідатор приймає оригінальний обʼєкт. Якщо помилки немає, то її значення буде undefined. А якщо помилка є, то можемо витягнути повідомлення або сформувати свою помилку і статус код. Також валідатор повертає обʼєкт value, який ми можемо обробляти далі після валідації.
Тож, обробимо помилку:
controllers/userController.js
const { error, value } = userValidator.createUserDataValidator(req.body);
console.log("error", error);
console.log("value", value);
if (error) throw new AppError(400, "Invalid user data...");
const { name, year, email } = value;
// next code
Перевіримо, якщо два поля з помилками формату даних:
В details буде описано всі помилки в масиві, які ми можемо обробляти.
Наведемо повний код контроллера з перевіркою.
Розгорни, щоб побачити код
controllers/userController.js
const { catchAsync, userValidator, AppError } = require("../utils");
exports.createUser = catchAsync(async (req, res) => {
// валідація даних, які прийшли
const { error, value } = userValidator.createUserDataValidator(req.body);
// console.log("error", error);
// console.log("value", value);
if (error) throw new AppError(400, "Invalid user data...");
const { name, year, email } = value;
//створюємо обʼєкт нового користувача, генеруємо для нього унікальний id
const newUser = { name, year, email, id: uuid() };
// зберігаємо користувача в базу даних (usersdb.json)
const usersDB = await fs.readFile("./usersdb.json");
const users = JSON.parse(usersDB);
users.push(newUser);
await fs.writeFile("./usersdb.json", JSON.stringify(users));
//надсилаємо відповідь на фронтенд
res.status(201).json({
msg: "User created",
user: newUser,
});
});