מבנה אחיד לשגיאות
חלק מהיחידה 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');אתגר
קל- כתבו את
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);
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.