التحليل الدفاعي وأغلفة الأخطاء
أنشئ معالجة قوية للطلبات: حلّلها بطريقة دفاعية، وحوّل جميع حالات الفشل إلى غلاف خطأ JSON موجز، وتجنّب كشف التفاصيل الداخلية.
التحليل الدفاعي وأغلفة الأخطاء درس مجاني في TypeScript Academy على CoddyKit. هذا هو الدرس 2 من أصل 2. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في TypeScript Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة TypeScript Academy 2 دروس في المجموع.
مقدمة
الهدف: حلّل المدخلات بحذر، وأرجِع دائمًا غلاف خطأ JSON يمكن التنبؤ به. سنُبقي التحقق قريبًا من الحدود، ونوحّد حالات الفشل، ونحافظ على غنى السجلات مع إبقاء الاستجابات موجزة.
- استخدم safeParse مع جميع المدخلات غير الموثوقة
- بنية موحّدة هي { error, code, details? }
- التمييز المنضبط بين 4xx و5xx
محوّل غلاف الخطأ
عرّف ErrorEnvelope صغيرًا وقابلًا لإعادة الاستخدام. حوّل أخطاء unknown إليه دون كشف مسارات مكدس الاستدعاءات.
export type ErrorEnvelope = { error: string; code?: string; details?: unknown }
export function toEnvelope(u: unknown): ErrorEnvelope {
if (u instanceof Error) return { error: u.message }
if (typeof u === "string") return { error: u }
try { return { error: JSON.stringify(u) } } catch { return { error: "Unknown error" } }
}مساعد التحقق
غلّف المخططات في مساعد validate يُرجع نتيجة مميّزة. وتبقى معالجات الطلبات صغيرة وموحّدة.
import { z, type ZodTypeAny } from "zod"
export function validate<T extends ZodTypeAny>(schema: T, value: unknown) {
const r = schema.safeParse(value)
if (!r.success) {
return { ok: false as const, issues: r.error.format() }
}
return { ok: true as const, data: r.data as z.infer<T> }
}معالج دفاعي
تحقّق مبكرًا، وأرجِع 400 مع تفاصيل المشكلات. تنتقل حالات الفشل غير المتوقعة إلى الوسيط البرمجي للأخطاء باعتبارها 500 مع الغلاف.
import type { Request, Response, NextFunction } from "express"
import { z } from "zod"
import { validate } from "./validate"
import { toEnvelope, type ErrorEnvelope } from "./envelope"
const bodySchema = z.object({ email: z.string().email(), newsletter: z.boolean().default(false) })
export function subscribe(req: Request, res: Response<{ ok: true } | ErrorEnvelope>, next: NextFunction) {
const r = validate(bodySchema, req.body)
if (!r.ok) return res.status(400).json({ error: "Invalid body", details: r.issues })
try {
// pretend to persist
return res.status(201).json({ ok: true })
} catch (e) {
return next(e)
}
}
export function errorMiddleware(err: unknown, _req: Request, res: Response<ErrorEnvelope>, _next: NextFunction) {
const env = toEnvelope(err)
res.status(500).json(env)
}أغلفة شائعة
وفّر مساعدين صغيرين للنتائج الشائعة: 404/401 مع سلاسل code ثابتة، لكي تتمكن العملاء من اختيار المسار المناسب بشكل موثوق.
export function notFound(resource: string): { status: 404; body: { error: string; code: string } } {
return { status: 404, body: { error: `${resource} not found`, code: "NOT_FOUND" } }
}
export function unauthorized(): { status: 401; body: { error: string; code: string } } {
return { status: 401, body: { error: "unauthorized", code: "UNAUTHORIZED" } }
}السجلات مقابل الاستجابة
وازن بين السجلات والاستجابة: سجّل الخطأ الكامل على الخادم (مكدس الاستدعاءات ومعرّف الطلب ومعرّف المستخدم)، لكن أرجِع غلافًا موجزًا إلى العميل. راعِ حدود المعدل وإخفاء بيانات PII.
التحقق من ممارسة الأغلفة
تحقق سريع: كيف ينبغي إرجاع أخطاء التحقق؟
خلاصة
خلاصة: تحقّق من المدخلات باستخدام safeParse، وحوّل حالات الفشل إلى غلاف موجز، وافصل بين السجلات الغنية والاستجابات الموجّهة إلى العميل.
تعلم TypeScript مع معلم ذكاء اصطناعي — مجانًا
اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.
- الدورات
- 101
- الدروس
- 352
الأسئلة الشائعة
هل درس «التحليل الدفاعي وأغلفة الأخطاء» مجاني؟
نعم — نص درس «التحليل الدفاعي وأغلفة الأخطاء» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة TypeScript Academy، انتقل إلى CoddyKit PRO. تتضمن دورة TypeScript Academy 2 دروس في المجموع.
ماذا ستتعلم في «التحليل الدفاعي وأغلفة الأخطاء»؟
أنشئ معالجة قوية للطلبات: حلّلها بطريقة دفاعية، وحوّل جميع حالات الفشل إلى غلاف خطأ JSON موجز، وتجنّب كشف التفاصيل الداخلية. تتمرن على TypeScript Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ TypeScript Academy؟
لا تُشترط خبرة سابقة. TypeScript Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 2.
كم من الوقت يستغرق درس «التحليل الدفاعي وأغلفة الأخطاء»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس TypeScript Academy هذا؟
نعم. كل درس في TypeScript Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- مخططات zod/valibot + الاستدلال
- التحليل الدفاعي وأغلفة الأخطاء