Menu
CoddyTech

Необязательные поля

Часть раздела 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, если поле было пропущено.

challenge icon

Задание

Легко

Измените два присваивания схем в 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

Потренируйтесь самостоятельно: Песочница Express