Валидация тела запроса по схеме
Условие
Напиши validate(schema, body): возвращает массив ошибок { path, msg } (пустой, если всё хорошо). Схема: объект поле → правило, правило { type: 'string' | 'number' | 'boolean', required?: boolean, min?, max? }. Для строк min/max ограничивают длину, для чисел значение.
Сообщения: required (поле обязательно и отсутствует или null), type (не тот тип; NaN не число), min, max. На поле не больше одной ошибки, проверки в этом порядке. Поля, которых нет в схеме, дают ошибку unknown (защита от mass assignment). Порядок ошибок: сначала поля схемы в порядке схемы, потом неизвестные в порядке тела.
Примеры
validate({"email":{"type":"string","required":true}}, {"email":"a@b.ru"}) // []
validate({"email":{"type":"string","required":true}}, {}) // [{"path":"email","msg":"required"}]
validate({"age":{"type":"number","min":18}}, {"age":"20"}) // [{"path":"age","msg":"type"}]
Как подойти
Подсказки: 2
- Сначала required, потом тип, потом min/max.
- Не путай «нет значения» с «ложное значение»:
0,false,""это значения.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.
Предыдущий вопрос
Роутер: сопоставление пути и параметров
Следующий вопрос
Код-ревью: Express-эндпоинт заказа