تكرار السؤال: …
الإجابة المختصرة
تنفذ الـ Middlewares بالتتابع عبر استدعاء next()؛ والـ Error Middleware يتميز بقبول 4 معاملات (err, req, res, next) ولا يُستدعى إلا عند تمرير خطأ إلى next(err).
الشرح
الـ Middleware هو دالة تمتلك صلاحية الوصول لكائنات req وres ودالة next(). إذا لم تستدعِ الدالة next() أو تنهِ الاستجابة بـ res.send()، سيعلق الطلب دون رد. للتعامل مع الأخطاء، يُعرف Express دوالاً تحتوي بالضبط 4 معاملات؛ يقوم Express بفحص .length الخاص بالدالة، وعندما تستدعي أي middleware سابقة next(error)، يتخطى Express كل الـ middlewares العادية ويتوجه مباشرة لأول Error Handler.
مثال بالكود
// Error handler middleware
app.use((err: Error, req: Request, res: Response, next: NextFunction) => {
console.error(err.stack);
res.status(500).json({ error: "Internal Server Error" });
});أخطاء شائعة
- حذف المعامل الرابع next من تعريف الـ error handler مما يجعل Express يعامله كـ regular middleware ويتجاهله عند وقوع خطأ.