可选字段
本课属于 Coddy Node.js 学习旅程的“REST API”单元。第 9 课,共 25 课。
一个完整的任务需要标题和完成值。PATCH 请求可以只修改其中一项。在对象模式上调用 .partial(),会让它的字段变为可选,同时保留对已提供字段的规则。
const ChangeBook = Book.partial();
ChangeBook.safeParse({year: 2000});省略标题是允许的,但提供的 year 仍必须是数字。partial 不会让无效值变成有效值。原始模式保持不变,因此用于替换完整资源的路由仍可以要求提供所有字段。
Book.partial({ pages: true }) 只会让 pages 变为可选,其他字段仍为必填。创建请求通常会省略带默认值的字段,同时仍要求提供主要标题。解析后,const { pages = 1 } = result.data 会在省略该字段时提供 1。
挑战
简单编辑 exercise.js 中的两个模式赋值。保留 Task 作为完整记录。让 ChangeTask 接受 PATCH 请求中省略的字段。让 NewTask 要求包含 title,但允许省略 done。
向 /result 发送 POST 请求,内容为 {}:预期得到 {"change":true,"create":false}。内容为 {"title":"Read"} 的请求体会通过两项检查。提供的值仍需具有正确的类型:{"done":"false"} 无法通过两项检查。
初始的 GET /result 使用提供的示例 {}。使用带有 JSON 请求体的 POST /result 来尝试其他输入。
亲手试试
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 在线编辑器