Campos opcionales
Parte de la sección API REST del Journey de Node.js de Coddy. Lección 9 de 25.
Una tarea completa necesita un título y un valor de finalización. Una solicitud PATCH puede cambiar solo uno de ellos. Llamar a .partial() en un esquema de objeto hace que sus campos sean opcionales, pero mantiene las reglas para los campos que estén presentes.
const ChangeBook = Book.partial();
ChangeBook.safeParse({year: 2000});Se permite omitir el título, pero el año proporcionado debe seguir siendo un número. Partial no convierte los valores incorrectos en válidos. El esquema original permanece sin cambios, por lo que una ruta que reemplaza un recurso completo puede seguir exigiendo todos los campos.
Book.partial({ pages: true }) hace que solo pages sea opcional; los demás campos siguen siendo obligatorios. En una solicitud de creación suele omitirse un campo con un valor predeterminado, aunque se siga exigiendo el título principal. Después del análisis, const { pages = 1 } = result.data proporciona 1 cuando se omitió el campo.
Desafío
FácilEdita las dos asignaciones de esquemas en exercise.js. Mantén Task como el registro completo. Haz que ChangeTask acepte campos omitidos para PATCH. Haz que NewTask requiera un título, pero permita omitir done.
Envía POST {} a /result: espera {"change":true,"create":false}. Un cuerpo con {"title":"Read"} pasa ambas validaciones. Los valores proporcionados siguen necesitando el tipo correcto: {"done":"false"} falla ambas.
La solicitud inicial GET /result usa el ejemplo proporcionado {}. Usa POST /result con un cuerpo JSON para probar otras entradas.
Pruébalo tú mismo
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 };
}
Todas las lecciones de API REST
1Recursos y verbos
Recursos y URLCrear con POST4Navegadores, versiones y configuración
Qué es un origenPermitir otro origenCORSUna página que llama a la API2Validación y errores
Validar la entradaPractica por tu cuenta: Playground de Express