الفكرة من استخدام الـ middleware هو إضافة وظيفة res.cookie() إلى response object، حيث أن وظيفة res.cookie() تستخدم لإنشاء ملفات تعريف الارتباط وإرسالها إلى العميل.
ويتكون الكود من دالة واحدة تسمى cookies()، وتستقبل تلك الدالة دالة أخرى كمعامل، والتي ستصبح middleware الرئيسي، وترجع الدالة cookies() middleware الجديد، والذي يضيف وظيفة res.cookie() إلى response object.
أي أن:
const cookies = (handler) => (req, res) => { ... }:
هو تعريف لدالة (cookies) وتقوم بقبول معامل واحد (handler)، وتلك الدالة تُستدعى مع معامل واحد آخر (من نوع req و res) عندما تُستدعى داخل تطبيق Node.js. الدالة تعيد دالة أخرى.
وفي السطر التالي:
res.cookie = (name, value, options) => cookie(res, name, value, options):
تم إنشاء خاصية جديدة cookie داخل كائن الاستجابة (res)، وتلك الخاصية تمكنك من تعيين قيمة كوكيز جديدة باستخدام res.cookie(name, value, options).
والسطر التالي:
return handler(req, res):
يتم استدعاء الدالة handler الممررة كمعامل إلى الدالة الأصلية cookies باستخدام handler(req, res)، مما يعني أن أي وظيفة أخرى تقوم باستدعاء cookies كمعالج ستتلقى معاملي req و res وستتمكن من استخدام res.cookie لتعيين قيمة كوكيز.
وتستطيع تعيين كوكيز جديدة داخل معالج الطلب كما يلي:
import cookies from './cookies';
const requestHandler = (req, res) => {
// تعيين قيمة كوكيز باستخدام res.cookie
res.cookie('user', 'Montaser', { maxAge: 3600000 });
// الرد على الطلب العادي
res.send('Hello, World!');
};
// استخدام middleware لمعالج الطلب
const app = express();
app.use(cookies);
app.get('/', requestHandler);
app.listen(3000, () => {
console.log('Server is running on port 3000');
});