في إطار عمل Express.js، تعد البرمجيات الوسيطة (Middleware) مكونات برمجية حاسمة تتمكن من التدخل في دورة معالجة الطلبات HTTP، مما يسمح بتنفيذ رموز أو وظائف معينة قبل وبعد وصول الطلب إلى الطريق النهائي أو التوجيه المطلوب. هذه البرمجيات يمكن أن تُستخدم لأغراض متنوعة مثل تسجيل الدخول، تعديل الطلبات والاستجابات، وإدارة الجلسات أو الأمان.
تعريف Middleware
Middleware في Express.js هي دالة لها الوصول إلى كائنات الطلب (request)، الاستجابة (response)، والدالة التالية في دورة طلب البرنامج التي يُشار إليها بـ next()
. عند استدعاء next()
، ينتقل Express إلى البرمجية الوسيطة التالية أو دالة التوجيه.
أمثلة على استخدام Middleware
- تسجيل الطلبات:
const logger = (req, res, next) => {
console.log(`${new Date()} - ${req.method} request to ${req.url}`);
next();
};
app.use(logger);
هذه البرمجية الوسيطة تسجل تفاصيل كل طلب يتم تلقيه، مثل الوقت ونوع الطلب والمسار المطلوب.
- التحقق من الصلاحيات:
const authenticate = (req, res, next) => {
if (req.isAuthenticated()) {
return next();
}
res.status(403).send('Unauthorized');
};
app.use('/admin', authenticate);
هذا Middleware يتحقق من أن المستخدم قد قام بالتوثيق قبل السماح له بالوصول إلى مسارات تحت /admin
.
تنفيذ Middleware
يمكن تنفيذ Middleware على مستويات مختلفة داخل تطبيق Express:
- Application-level middleware:
app.use(express.json());
هذه البرمجية الوسيطة تُستخدم لتحليل جسم الطلبات القادمة في صورة JSON.
- Router-level middleware:
const router = express.Router();
router.use((req, res, next) => {
if (req.app.get('env') !== 'development') {
return next();
}
console.log('Development mode active');
next();
});
app.use('/', router);
هنا، Middleware مطبق على مستوى الراوتر، يتم استخدامه لتنفيذ وظائف خاصة عندما يكون التطبيق في وضع التطوير.
- Error-handling middleware:
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).send('Something went wrong!');
});
Middleware لمعالجة الأخطاء يستخدم أربعة معاملات ويُعالج الأخطاء التي قد تحدث أثناء معالجة الطلبات.
استراتيجيات فعالة لاست
خدام Middleware
- ترتيب التنفيذ: يجب وضع البرمجيات الوسيطة التي تنفذ وظائف عامة (مثل تسجيل الدخول) قبل البرمجيات التي تقوم بالتوجيه أو تنفيذ منطق تطبيق محدد.
- استخدام
next()
بشكل صحيح: دائمًا استدعيnext()
للتأكد من أن دورة الطلب تستمر بسلاسة، إلا في حالات التعامل مع الأخطاء حيث قد ترغب في إيقاف الدورة. - فصل المنطق: حافظ على برمجياتك الوسيطة مركزة ومسؤولة عن وظيفة واحدة فقط لتسهيل الصيانة وإعادة الاستخدام.
خلاصة
البرمجيات الوسيطة في Express.js توفر طريقة قوية ومرنة لإدارة تدفق الطلبات والاستجابات داخل التطبيق. من خلال التعامل الذكي مع Middleware، يمكن للمطورين بناء تطبيقات ويب قوية وأمنة وسهلة الصيانة.