Trường tùy chọn
Thuộc phần REST API trong hành trình Node.js của Coddy. Bài học 9 trên 25.
Một tác vụ hoàn chỉnh cần có tiêu đề và giá trị cho biết đã hoàn thành hay chưa. Yêu cầu PATCH có thể chỉ thay đổi một trong hai giá trị đó. Gọi .partial() trên lược đồ đối tượng sẽ biến các trường của lược đồ thành tùy chọn, đồng thời vẫn giữ nguyên các quy tắc cho những trường có mặt.
const ChangeBook = Book.partial();
ChangeBook.safeParse({year: 2000});Có thể bỏ qua tiêu đề, nhưng nếu cung cấp năm thì năm đó vẫn phải là số. Partial không biến giá trị không hợp lệ thành hợp lệ. Lược đồ ban đầu vẫn không thay đổi, vì vậy một tuyến thay thế tài nguyên hoàn chỉnh vẫn có thể yêu cầu mọi trường.
Book.partial({ pages: true }) chỉ biến pages thành tùy chọn; các trường khác vẫn bắt buộc. Yêu cầu tạo mới thường bỏ qua một trường có giá trị mặc định nhưng vẫn yêu cầu tiêu đề chính. Sau khi phân tích cú pháp, const { pages = 1 } = result.data cung cấp giá trị 1 nếu trường đó bị bỏ qua.
Thử thách
DễChỉnh sửa hai phép gán lược đồ trong exercise.js. Giữ Task là bản ghi đầy đủ. Để ChangeTask chấp nhận các trường bị bỏ qua trong PATCH. Để NewTask yêu cầu có tiêu đề nhưng cho phép bỏ qua done.
Gửi POST {} đến /result: kết quả mong đợi là {"change":true,"create":false}. Phần thân yêu cầu {"title":"Read"} vượt qua cả hai. Các giá trị được cung cấp vẫn cần đúng kiểu: {"done":"false"} không vượt qua cả hai.
Lệnh GET /result ban đầu dùng ví dụ được cung cấp là {}. Dùng POST /result với phần thân JSON để thử các đầu vào khác.
Tự làm thử
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 };
}
Tất cả bài học trong REST API
1Tài nguyên và động từ
Tài nguyên và URLTạo tài nguyên bằng POST4Trình duyệt, phiên bản và cấu hình
Origin là gìCho phép một origin khácCORSTrang gọi API2Xác thực và lỗi
Xác thực đầu vàoTự luyện tập: Playground Express