تخطَّ إلى المحتوى

🟩 شرح Node.js

مفهوم الـ Middleware

الدرس 17 من 29· ⏱ 1 دقائق قراءة· 🗓 آخر تحديث: ٢٤ يونيو ٢٠٢٦

ما هو الـ 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.

شرح مفهوم الـ Middleware — Node.js بالعربي
مفهوم الـ MiddlewareNode.js بالعربي · The Code Fix

📚 لمزيد من التعمّق في Node.js، راجِع التوثيق الرسمي لـ Node.js.

هل كان هذا الدرس مفيدًا؟