Menu
CoddyTech

מבנה אחיד לשגיאות

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

ה-API שלך מחזיר עכשיו שגיאות בשני מבנים: מחרוזת עבור 404 ואובייקט של zod עבור 400. לקוח צריך לטפל בכל אחד מהם. בחר מבנה אחד לכל השגיאות:

{ "error": { "code": "not_found", "message": "Invoice not found" } }

{ "error": { "code": "invalid_body", "message": "Too small: ...",
             "fields": { "amount": ["Too small: expected number to be >0"] } } }

code מיועד לתוכניות: הוא לעולם לא משתנה, ולכן לקוח יכול להשוות אותו. message מיועד לאנשים, והניסוח שלו עשוי להשתנות. fields מציין לטופס איזה שדה קלט לסמן. כתוב את המבנה בפונקציה אחת וקרא לה מכל נתיב, כדי שאף נתיב לא יחרוג ממנו:

sendError(res, 404, 'not_found', 'Invoice not found');
challenge icon

אתגר

קל
  • כתבו את sendError ב־errors.js: { "error": { "code", "message" } } עם קוד המצב, ובנוסף fields רק אם הוא ניתן.
  • השתמשו בו עבור כל תגובות 404 (קוד not_found), ב־sendInvalid עבור כל גוף בקשה לא תקין, וב־sendError במטפל השגיאות של server.js (invalid_json, server_error).

שלחו DELETE /api/tasks/99, ואז בקשת POST עם { "title": 123 }.

נסו בעצמכם

import { z } from 'zod';

// שולח כל שגיאה במבנה אחיד:
// { "error": { "code": "not_found", "message": "Task not found" } }
// כאשר "fields" נוסף רק אם הוא סופק.
export const sendError = (res, status, code, message, fields) => {
    // שלחו את התשובה כאן
};

// שגיאת zod בתור 400: הבעיה הראשונה שלה משמשת כהודעה, והבעיות של כל שדה
// מופיעות ב-fields.
export const sendInvalid = (res, zodError) =>
    sendError(res, 400, 'invalid_body', zodError.issues[0].message, z.flattenError(zodError).fieldErrors);
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה REST APIs