Menu
CoddyTech

صيغة موحّدة للأخطاء

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