اذهب إلى المحتوى
  • 0

شرح كود Middleware في Node.js وكيف يمكن استخدامه للتعامل مع الكوكيز في الطلبات HTTP

منتصر احمد

السؤال

const cookies = (handler) => (req, res) => {
    res.cookie = (name, value, options) => cookie(res, name, value, options)
    return handler(req, res)
}

export default cookies

هل يمكن شرح هذا الكود لاني لا استطيع فهمه

تم التعديل في بواسطة Mustafa Suleiman
تعديل عنوان السؤال
رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

الفكرة من استخدام الـ 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');
});

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...