ما هو الـ Middleware؟
دالة وسيطة تعمل بين وصول الطلب وإرسال الرد. لها وصول إلى req وres
ودالة next التي تمرّر التحكّم للوسيط التالي.
function logger(req, res, next) {
console.log(`${req.method} ${req.url}`);
next(); // مرّر للخطوة التالية
}
app.use(logger);
⚠️ نسيان استدعاء
next()يعلّق الطلب إلى الأبد (لن يصل ردّ).
تسلسل المعالجة
الطلب → middleware 1 → middleware 2 → معالج المسار → الرد
كل وسيط إمّا يمرّر بـ next() أو ينهي الطلب بـ res.send().
أنواع شائعة
وسيط عام (لكل الطلبات)
app.use(express.json()); // قراءة جسم JSON
app.use(express.static("public")); // ملفّات ثابتة
وسيط لمسار محدّد
function checkAuth(req, res, next) {
if (!req.headers.authorization) {
return res.status(401).json({ error: "غير مصرّح" });
}
next();
}
app.get("/profile", checkAuth, (req, res) => {
res.json({ user: "data" });
});
وسيط معالجة الأخطاء
يميّزه أربعة معاملات (err أولًا)، ويوضع في النهاية:
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).json({ error: "خطأ في الخادم" });
});
مثال متكامل
import express from "express";
const app = express();
app.use(express.json()); // وسيط مدمج
app.use((req, res, next) => { // وسيط مخصّص
req.requestTime = Date.now();
next();
});
app.get("/", (req, res) => {
res.json({ time: req.requestTime });
});
app.listen(3000);
أخطاء شائعة
- نسيان
next()فيتجمّد الطلب. - ترتيب الأوساط خطأ — مثلًا وضع
express.json()بعد المسار الذي يحتاجه.
🎯 التالي: تصميم واجهة برمجية REST.