Необязательные поля
Часть раздела REST API путешествия по Node.js на Coddy. Урок 9 из 25.
Для полной задачи нужны заголовок и значение done. Запрос PATCH может изменить только одно из них. Вызов .partial() для схемы объекта делает её поля необязательными, сохраняя правила для тех полей, которые указаны.
const ChangeBook = Book.partial();
ChangeBook.safeParse({year: 2000});Заголовок можно пропустить, но переданный год всё равно должен быть числом. Partial не превращает недопустимые значения в допустимые. Исходная схема остаётся неизменной, поэтому маршрут, который заменяет ресурс целиком, может по-прежнему требовать все поля.
Book.partial({ pages: true }) делает необязательным только поле pages; остальные поля остаются обязательными. В запросе на создание часто не указывают поле со значением по умолчанию, продолжая требовать основной заголовок. После разбора const { pages = 1 } = result.data присваивает значение 1, если поле было пропущено.
Задание
ЛегкоИзмените два присваивания схем в exercise.js. Оставьте Task полной записью. Сделайте так, чтобы ChangeTask допускала пропущенные поля для PATCH. Сделайте так, чтобы NewTask требовала заголовок, но допускала пропуск done.
Отправьте POST-запрос с {} на /result: ожидайте {"change":true,"create":false}. Тело запроса {"title":"Read"} проходит обе проверки. Указанные значения по-прежнему должны иметь правильный тип: {"done":"false"} не проходит ни одну из проверок.
При начальной загрузке GET /result используется предоставленный пример {}. Используйте POST-запрос на /result с телом в формате JSON, чтобы проверить другие входные данные.
Попробуйте сами
import { z } from 'zod';
const Task = z.object({ title: z.string(), done: z.boolean() });
const ChangeTask = Task;
const NewTask = Task;
export function exercise(body) {
return { change: ChangeTask.safeParse(body).success, create: NewTask.safeParse(body).success };
}
Все уроки раздела REST API
1Ресурсы и глаголы
Ресурсы и URLСоздание с помощью POST4Браузеры, версии и конфигурация
Что такое originРазрешение другого originCORSСтраница, вызывающая API2Валидация и ошибки
Проверка входных данныхПотренируйтесь самостоятельно: Песочница Express