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

السؤال

نشر (معدل)
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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...