Menu
CoddyTech

الحقول الاختيارية

جزء من قسم واجهات REST API في رحلة 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 API

تدرّب بنفسك: Playground لـ Express