Menu
CoddyTech

שדות אופציונליים

חלק מהיחידה REST APIs במסלול ה-Node.js של Coddy. שיעור 9 מתוך 25.

משימה מלאה צריכה כותרת וערך שמציין אם היא הושלמה. בקשת PATCH יכולה לשנות רק אחד מהם. קריאה ל־.partial() בסכמת אובייקט הופכת את השדות שלה לאופציונליים, תוך שמירה על הכללים עבור כל השדות שנכללו.

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

השמטת הכותרת מותרת, אבל שנה שסופקה עדיין חייבת להיות מספר. partial לא הופכת ערכים שגויים לתקינים. הסכמה המקורית נשארת ללא שינוי, ולכן נתיב שמחליף משאב מלא יכול להמשיך לדרוש את כל השדות.

Book.partial({ pages: true }) הופכת רק את pages לאופציונלי; שאר השדות נשארים נדרשים. בבקשת יצירה משמיטים לעיתים קרובות שדה שיש לו ערך ברירת מחדל, ובו בזמן עדיין דורשים את הכותרת הראשית. לאחר הניתוח, const { pages = 1 } = result.data מספקת את הערך 1 כשהשדה הושמט.

challenge icon

אתגר

קל

ערוך את שתי ההשמות של הסכמות בקובץ exercise.js. השאר את Task כרשומה מלאה. הגדר את ChangeTask כך שיקבל שדות חסרים עבור PATCH. הגדר את NewTask כך שידרוש כותרת, אך יאפשר להשמיט את done.

שלח POST עם {} אל /result: התוצאה הצפויה היא {"change":true,"create":false}. גוף הבקשה {"title":"Read"} עובר את שתי הבדיקות. הערכים שסופקו עדיין צריכים להיות מהסוג הנכון: {"done":"false"} נכשל בשתי הבדיקות.

הקריאה הראשונית אל GET /result משתמשת בדוגמה שסופקה, {}. השתמש ב-POST /result עם גוף JSON כדי לנסות קלטים אחרים.

נסו בעצמכם

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 APIs

תרגלו בעצמכם: Express אונליין