Menu
CoddyTech

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.

challenge icon

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

Tự luyện tập: Playground Express