Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
|
joi_-_validacija [2024/06/08 08:11] tro |
joi_-_validacija [2024/06/08 08:15] (текущий) tro |
||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| ====== JOI - валідація ====== | ====== JOI - валідація ====== | ||
| [[https:// | [[https:// | ||
| + | ===== Налаштування ===== | ||
| 1. **Визначення схем (Schema definition)**: | 1. **Визначення схем (Schema definition)**: | ||
| Строка 17: | Строка 18: | ||
| onDuty: Joi.boolean(), | onDuty: Joi.boolean(), | ||
| }); | }); | ||
| + | ===== Використання ===== | ||
| </ | </ | ||
| Строка 56: | Строка 58: | ||
| }); | }); | ||
| + | |||
| + | </ | ||
| + | |||
| + | **P.S.** Можна вказати { abortEarly: false } при виклику методу validate, щоб отримати всі можливі помилки валідації, | ||
| + | < | ||
| + | const validationResult = createStudentSchema.validate(userData, | ||
| + | abortEarly: false, | ||
| + | }); | ||
| + | |||
| + | </ | ||
| + | ===== Middleware валідації ===== | ||
| + | ==== Валідація у контроллері ==== | ||
| + | Ми можемо напряму викликати валідацію **req.body** в тілі контролера: | ||
| + | < | ||
| + | //... | ||
| + | app.post( | ||
| + | '/ | ||
| + | async (req, res, next) => { | ||
| + | try { | ||
| + | await createStudentSchema.validateAsync(req.body, | ||
| + | //.. | ||
| + | } catch (validationError) { | ||
| + | next(validationError); | ||
| + | } | ||
| + | }, | ||
| + | ); | ||
| + | |||
| + | </ | ||
| + | Зверни увагу, що ми використовуємо**validateAsync** , тому що це дозволить нам виконувати асинхронні операції під час валідації, | ||
| + | |||
| + | Але таке рішення буде перенавантажувати логіку в тілі контроллера, | ||
| + | |||
| + | < | ||
| + | // src/ | ||
| + | |||
| + | import createHttpError from ' | ||
| + | |||
| + | export const validateBody = (schema) => async (req, res, next) => { | ||
| + | try { | ||
| + | await schema.validateAsync(req.body, | ||
| + | abortEarly: false, | ||
| + | }); | ||
| + | next(); | ||
| + | } catch (err) { | ||
| + | const error = createHttpError(400, | ||
| + | errors: err.details, | ||
| + | }); | ||
| + | next(error); | ||
| + | } | ||
| + | }; | ||
| </ | </ | ||