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

السؤال

نشر

لدي بعض العمليات التي يتم تطبيقها في كل وسيط middleware بشكل منفصل على الآخر، ولدي مسار يحوي أكثر من وسيط بحيث سيتم الدخول على كل منها بشكل متسلسل لإجراء بعض العمليات وتمرير النتيجة إلى الوسيط التالي وهكذا، مثال:

router.get('/clients', [middleware1, middleware2], controller.doWork)

وأقوم بوضع التابع next في هذه الوسطاء للمتابعة أو للإيقاف، ولكن كيف يمكنني تمرير القيم أو المتغيرات بين هذه الوسطاء من خلال express ؟

Recommended Posts

  • 1
نشر

يمكنك استخدام التابعين req, res لهذا الشيء, يتم استخدامهم كالتالي

const express = require("express");
const app = express();
  
function middleware1(req, res, next) {
  req.data1 = "Data1";
  next();
}
  
function middleware2(req, res, next) {
  console.log("Data2.");
  console.log(req.data1);//هنا تم الحصول على البيانات من الوسيط الأول وطباعتها
  next();
}
  
app.get("/clients", [middleware1, middleware2], (req, res) => {
  return res.send(req.data1);
});

 

  • 1
نشر

يمكنك تمرير المتغيرات بين الوسطاء باستخدام كائن res.locals ، حيث تكون المتغيرات صالحة فقط طوال عمر الطلب.

const express = require('express');

const app = express();

app.get('/clients', middleware1, middleware2, (req, res) => {
    res.send('clients page');
})

function logger1(req, res, next) {
    //تمرير المتغيرات
    res.locals.client = "gowtham";
    res.locals.id = "3434";
    next();
}

function logger2(req, res, next) {
    // الوصول إلى المتغيرات
    const client = res.locals.user;
    const id = res.locals.id;
    console.log(client, id);
    next();
}

app.listen(4300, () => console.log(`App is running`));

ملاحظة: لا يمكنك تمرير المتغيرات من خلال الدالة ()next لأنها تستخدم لتشغيل وظيفة البرامج الوسيطة التالية في التطبيق.

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...