معالجة الأخطاء على مستوى التطبيق
التقط أخطاء HTTP وحوّلها مركزيًا
معالجة الأخطاء على مستوى التطبيق درس مجاني في Angular Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Angular Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Angular Academy 4 دروس في المجموع.
المعالجة المركزية للأخطاء
بدلًا من التقاط أخطاء HTTP في كل مكوّن، يمكن للمعترض معالجتها مركزيًا: تسجيلها، أو عرض إشعار، أو إعادة التوجيه عند 401، أو توحيد بنية الخطأ.
catchError في معترض
مرّروا تدفق next(req) عبر catchError لاعتراض حالات الفشل.
import { catchError, throwError } from 'rxjs';
import { HttpErrorResponse } from '@angular/common/http';
export const errorInterceptor: HttpInterceptorFn = (req, next) =>
next(req).pipe(
catchError((err: HttpErrorResponse) => {
console.error('HTTP error', err.status);
return throwError(() => err);
})
);فحص HttpErrorResponse
يحتوي HttpErrorResponse على status وmessage ونص الخطأ error القادم من الخادم. تفرّعوا بناءً على الحالة لمعالجة الحالات المختلفة.
catchError((err: HttpErrorResponse) => {
if (err.status === 0) console.error('network/CORS error');
else console.error('server error', err.status);
return throwError(() => err);
})إعادة التوجيه عند 401
يعني الخطأ 401 عادةً انتهاء الجلسة. أعيدوا التوجيه إلى تسجيل الدخول من المعترض.
export const errorInterceptor: HttpInterceptorFn = (req, next) => {
const router = inject(Router);
return next(req).pipe(
catchError((err: HttpErrorResponse) => {
if (err.status === 401) router.navigate(['/login']);
return throwError(() => err);
})
);
};عرض إشعار
احقنوا خدمة إشعارات لعرض الأخطاء للمستخدم بطريقة متسقة.
export const errorInterceptor: HttpInterceptorFn = (req, next) => {
const toast = inject(ToastService);
return next(req).pipe(
catchError((err: HttpErrorResponse) => {
toast.error(err.error?.message ?? 'Something went wrong');
return throwError(() => err);
})
);
};إعادة الرمي مقابل التجاهل
أعيدوا الرمي عادةً باستخدام throwError(() => err) حتى تتمكن المكوّنات من الاستجابة أيضًا. ولا تعيدوا Observable احتياطيًا (مثل of(null)) إلا عندما تريدون فعلًا إخفاء الخطأ عن المستدعين.
توحيد الخطأ
حوّلوا نصوص أخطاء الخادم المتنوعة إلى بنية خطأ موحّدة للتطبيق قبل إعادة رميها، مما يبسّط معالجتها لاحقًا.
catchError((err: HttpErrorResponse) => {
const appError = {
code: err.status,
message: err.error?.message ?? err.message
};
return throwError(() => appError);
})تمييز أخطاء العميل عن أخطاء الخادم
يشير err.error instanceof ErrorEvent (أو err.status === 0) إلى خطأ من العميل أو الشبكة؛ وإلا فقد أعادت الواجهة الخلفية حالة خطأ. عالجوا الحالتين بشكل مختلف.
تجنب المعالجة المزدوجة
إذا كان المعترض قد عرض إشعارًا، فلا ينبغي للمكوّنات عرض إشعار آخر للخطأ نفسه. اختاروا طبقة واحدة لمعالجة الرسائل الظاهرة للمستخدم لتجنب التكرار.
التسجيل في خدمة مراقبة
يُعد المعترض المركزي المكان المثالي لإرسال الأخطاء إلى أداة مراقبة (مثل Sentry) مع إرفاق سياق الطلب.
export const errorInterceptor: HttpInterceptorFn = (req, next) => {
const monitor = inject(MonitoringService);
return next(req).pipe(
catchError((err: HttpErrorResponse) => {
monitor.captureHttpError(req.url, err.status, err.message);
return throwError(() => err);
})
);
};ترتيب معترض الأخطاء
ضعوا معترض الأخطاء بحيث يغلف بقية المعترضات، ليتمكن من التقاط الأخطاء من السلسلة بأكملها، بما في ذلك عمليات إعادة المحاولة.
provideHttpClient(
withInterceptors([authInterceptor, retryInterceptor, errorInterceptor])
)تحقق سريع
اختبروا مدى فهمكم للمعالجة العامة للأخطاء.
مراجعة: معالجة الأخطاء مركزيًا
يجمع معترض الأخطاء معالجة إخفاقات HTTP في مكان مركزي.
- استخدموا
catchErrorمعnext(req). - تفرّعوا بناءً على
HttpErrorResponse.status(مثل إعادة التوجيه عند 401). - أعيدوا رمي الخطأ كي تتمكن المكوّنات من الاستجابة، وتجاهلوه فقط عند القصد من ذلك.
التالي: إعادة المحاولة ومؤشرات التحميل.
الأسئلة الشائعة
هل درس «معالجة الأخطاء على مستوى التطبيق» مجاني؟
نعم — نص درس «معالجة الأخطاء على مستوى التطبيق» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Angular Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Angular Academy 4 دروس في المجموع.
ماذا ستتعلم في «معالجة الأخطاء على مستوى التطبيق»؟
التقط أخطاء HTTP وحوّلها مركزيًا تتمرن على Angular Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Angular Academy؟
لا تُشترط خبرة سابقة. Angular Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «معالجة الأخطاء على مستوى التطبيق»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Angular Academy هذا؟
نعم. كل درس في Angular Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- المعترضات الوظيفية
- إضافة ترويسات المصادقة
- معالجة الأخطاء على مستوى التطبيق
- إعادة المحاولة ومؤشرات التحميل