Menu
CoddyTech

Pola opcjonalne

Część sekcji API REST ścieżki Node.js w Coddy. Lekcja 9 z 25.

Kompletne zadanie wymaga tytułu i wartości określającej, czy jest ukończone. Żądanie PATCH może zmienić tylko jedną z tych wartości. Wywołanie .partial() na schemacie obiektu sprawia, że jego pola stają się opcjonalne, a reguły dotyczące podanych pól pozostają bez zmian.

const ChangeBook = Book.partial();
ChangeBook.safeParse({year: 2000});

Pominięcie tytułu jest dozwolone, ale podany rok nadal musi być liczbą. Metoda partial nie zmienia nieprawidłowych wartości w prawidłowe. Oryginalny schemat pozostaje bez zmian, więc trasa zastępująca cały zasób może nadal wymagać podania każdego pola.

Book.partial({ pages: true }) sprawia, że opcjonalne staje się tylko pole pages; pozostałe pola są nadal wymagane. W żądaniu utworzenia często pomija się pole z wartością domyślną, jednocześnie wymagając podania głównego tytułu. Po parsowaniu const { pages = 1 } = result.data przypisuje wartość 1, jeśli pominięto to pole.

challenge icon

Wyzwanie

Łatwy

Edytuj dwa przypisania schematów w pliku exercise.js. Pozostaw Task jako kompletny rekord. Spraw, aby ChangeTask akceptował pominięte pola w żądaniu PATCH. Spraw, aby NewTask wymagał tytułu, ale pozwalał pominąć done.

Wyślij żądanie POST z treścią {} na adres /result: oczekiwany wynik to {"change":true,"create":false}. Treść żądania {"title":"Read"} przechodzi obie walidacje. Podane wartości nadal muszą mieć właściwy typ: {"done":"false"} nie przechodzi żadnej z nich.

Początkowe żądanie GET /result używa podanego przykładu {}. Użyj żądania POST /result z treścią w formacie JSON, aby wypróbować inne dane wejściowe.

Spróbuj swoich sił

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 };
}

Wszystkie lekcje w sekcji API REST

Poćwicz samodzielnie: Edytor online Express