মিডলওয়্যার এবং অ্যাপ্লিকেশন.উপসটি এক্সপ্রেসগুলিতে আসলে কী বোঝায়?


228

আমি দেখি প্রায় প্রতিটি এক্সপ্রেস অ্যাপ্লিকেশনটির app.useমিডলওয়্যারের পক্ষে বিবৃতি থাকে তবে মিডলওয়্যারটি আসলে কী এবং app.useবিবৃতিটি কী করছে তার একটি পরিষ্কার, সংক্ষিপ্ত বিবরণ আমি পাইনি । এমনকি এক্সপ্রেস ডক্সও এ সম্পর্কে কিছুটা অস্পষ্ট। আপনি দয়া করে আমার জন্য এই ধারণাগুলি ব্যাখ্যা করতে পারেন?


3
রেফারেন্সের জন্য অনুরূপ প্রশ্ন (হউক না কেন এই এক তৈরি করা হয়েছে আগে) থেকে: stackoverflow.com/questions/11321635/...
ericsoco

43
^ হা! এই দুটি প্রশ্ন মন্তব্যে একে অপরের রেফারেন্স।
জুলিয়ান এইচ লাম

17
সুতরাং এটি একটি সিরিয়াল রেফারেন্স।
স্টিভ কে

6
এক্সপ্রেস.জেএস মিডলওয়্যার ডিমেসাইডেড বিষয়টির উপর একটি দুর্দান্ত ব্লগ পোস্ট। এটি এখানে আগে অনুলিপি-পেস্ট করা হয়েছিল, যা অবশ্যই চুরির चोरी, তবে মূল পোস্টটি এখনও সত্যই সহায়ক তাই আমি এখানে একটি লিঙ্ক রেখেছি।
টটিমেডলি

1
আমি এক্সপ্রেস.জেএস মিডলওয়্যারের উপর একটি নিবন্ধ লিখেছি। এখানে লিঙ্কটি দেওয়া হয়েছে: nodexplained.com/blog-detail/2017/12/31/…
shrawan_lakhe

উত্তর:


111

মিডলওয়্যার

আমি একটি নতুন প্রকল্পের মিডলওয়্যারের ধারণাটি আলাদা করার মধ্য দিয়ে আছি।

মিডলওয়্যার আপনাকে স্ট্যাকের একটি স্ট্যাক সংজ্ঞায়িত করতে দেয় যা আপনার মধ্য দিয়ে প্রবাহিত হওয়া উচিত। এক্সপ্রেস সার্ভারগুলি তারা মিডলওয়্যারের একটি স্ট্যাক।

// express
var app = express();
// middleware
var stack = middleware();

তারপরে আপনি কল করে মিডওয়্যার স্ট্যাকের স্তরগুলি যুক্ত করতে পারেন .use

// express
app.use(express.static(..));
// middleware
stack.use(function(data, next) {
  next();
});

মিডওয়্যার স্ট্যাকের একটি স্তর হ'ল একটি ফাংশন, যা এন প্যারামিটার (এক্সপ্রেসের জন্য 2, reqএবং res) এবং একটি nextফাংশন নেয়।

মিডলওয়্যার আশা করে স্তরটি কিছু গণনা করবে, প্যারামিটারগুলি বাড়িয়ে তুলবে এবং তারপরে কল করবে next

আপনি যদি এটি পরিচালনা না করেন তবে একটি স্ট্যাক কিছুই করে না। এক্সপ্রেস প্রতিবার ইনকামিং এইচটিটিপি অনুরোধটি সার্ভারে ধরা পড়লে স্ট্যাকটি পরিচালনা করবে। মিডওয়্যারের সাথে আপনি স্ট্যাকটি ম্যানুয়ালি পরিচালনা করেন handle

// express, you need to do nothing
// middleware
stack.handle(someData);

আরও একটি সম্পূর্ণ উদাহরণ:

var middleware = require("../src/middleware.js");

var stack = middleware(function(data, next) {
    data.foo = data.data*2;
    next();
}, function(data, next) {
    setTimeout(function() {
        data.async = true;
        next();
    }, 100)
}, function(data) {
    console.log(data);
});

stack.handle({
    "data": 42
})

এক্সপ্রেস পদে আপনি কেবল প্রতিটি আগত এইচটিটিপি অনুরোধের জন্য হ্যান্ডেল করতে এক্সপ্রেস করতে চান এমন ক্রিয়াকলাপের সংজ্ঞা দেন।

এক্সপ্রেসের ক্ষেত্রে (সংযোগ না দিয়ে) আপনার কাছে বৈশ্বিক মিডলওয়্যার এবং রুট নির্দিষ্ট মিডওয়্যার রয়েছে। এর অর্থ আপনি প্রতিটি আগত এইচটিটিপি অনুরোধের সাথে মিডলওয়্যার স্ট্যাক সংযুক্ত করতে পারেন বা কেবল একটি নির্দিষ্ট রুটের সাথে যোগাযোগ করে এমন HTTP অনুরোধগুলিতে এটি সংযুক্ত করতে পারেন।

এক্সপ্রেস এবং মিডলওয়্যারের উন্নত উদাহরণ:

// middleware 

var stack = middleware(function(req, res, next) {
    users.getAll(function(err, users) {
        if (err) next(err);
        req.users = users;
        next();  
    });
}, function(req, res, next) {
    posts.getAll(function(err, posts) {
        if (err) next(err);
        req.posts = posts;
        next();
    })
}, function(req, res, next) {
    req.posts.forEach(function(post) {
        post.user = req.users[post.userId];
    });

    res.render("blog/posts", {
        "posts": req.posts
    });
});

var app = express.createServer();

app.get("/posts", function(req, res) {
   stack.handle(req, res); 
});

// express

var app = express.createServer();

app.get("/posts", [
    function(req, res, next) {
        users.getAll(function(err, users) {
            if (err) next(err);
            req.users = users;
            next();  
        });
    }, function(req, res, next) {
        posts.getAll(function(err, posts) {
            if (err) next(err);
            req.posts = posts;
            next();
        })
    }, function(req, res, next) {
        req.posts.forEach(function(post) {
            post.user = req.users[post.userId];
        });

        res.render("blog/posts", {
            "posts": req.posts
        });
    }
], function(req, res) {
   stack.handle(req, res); 
});

4
হুঁ ... এই ক্ষেত্রে মিডলওয়্যারটি কি আপনার নিজস্ব লাইব্রেরি বা এক্সপ্রেসের অংশ?
আইজেড

5
কুল। app.use()সিনটেক্সে আমি এখনও কিছুটা বিভ্রান্ত হয়ে পড়েছি । মিডলওয়্যারের আসল রিটার্ন মান কী এবং useএটি দিয়ে কী করে ?
আইজেড

9
@ আইজেড ব্যবহার এটি স্ট্যাকের সাথে যুক্ত করে। তারপরে প্রতিটি একক অনুরোধ স্ট্যাকের মধ্য দিয়ে যায়।
রায়নস

7
@ রায়নস, আপনার প্রকল্পের লিঙ্ক, "মিডলওয়্যার" টি ভাঙ্গা হয়েছে।
লি

1
@ রায়নোস কিন্তু আমি দেখছি যে মিডলওয়্যার এখনও এক্সপ্রেসে ব্যবহৃত হচ্ছে? তুমি কি বোঝাতে চাও যে এটাকে উপুড় করা হয়েছে?
টিমো হুভিনেন

60

জিনিসগুলি সরল করার পরে, একটি ওয়েব সার্ভার একটি ফাংশন হিসাবে দেখা যায় যা একটি অনুরোধ গ্রহণ করে এবং প্রতিক্রিয়া আউটপুট করে। সুতরাং আপনি যদি কোনও ওয়েব সার্ভারকে একটি ফাংশন হিসাবে দেখেন তবে আপনি এটিকে কয়েকটি টুকরো টুকরো করে গুছিয়ে রাখতে এবং তাদেরকে ছোট ফাংশনগুলিতে আলাদা করতে পারেন যাতে তাদের রচনাটি মূল ফাংশন হয়ে যায়।

মিডলওয়্যারগুলি হ'ল ছোট ফাংশন যা আপনি অন্যের সাথে রচনা করতে পারেন এবং এর সুস্পষ্ট সুবিধা হ'ল আপনি সেগুলি পুনরায় ব্যবহার করতে পারেন।


33

পূর্বের উত্তরে উল্লেখ না করা কিছু যুক্ত করতে আমি একটি দেরী উত্তর যুক্ত করব।

এতক্ষণে এটি পরিষ্কার হওয়া উচিত যে ক্লায়েন্টের অনুরোধ এবং সার্ভারের উত্তরগুলির মধ্যে মিডলওয়্যারগুলি হ'ল / হ'ল ফাংশন (গুলি) । মিডলওয়্যারের সর্বাধিক সাধারণ কার্যকারিতা হ'ল ত্রুটি পরিচালনা করা, ডাটাবেস ইন্টারঅ্যাকশন, স্ট্যাটিক ফাইল বা অন্যান্য সংস্থান থেকে তথ্য পাওয়া। মিডলওয়্যার স্ট্যাকের দিকে যাওয়ার জন্য পরবর্তী কলব্যাকটি অবশ্যই কল করতে হবে, প্রবাহের পরবর্তী ধাপে যাওয়ার জন্য আপনি মিডলওয়্যার ফাংশন শেষে দেখতে পারেন।

আপনি app.useপদ্ধতির ব্যবহার করতে পারেন এবং এর মতো একটি প্রবাহ রাখতে পারেন :

var express = require('express'),
    app = express.createServer(),                                                                                                                                                 
    port = 1337;

function middleHandler(req, res, next) {
    console.log("execute middle ware");
    next();
}

app.use(function (req, res, next) {
    console.log("first middle ware");                                                                                                             
    next();
});

app.use(function (req, res, next) {
    console.log("second middle ware");                                                                                                             
    next();
});

app.get('/', middleHandler, function (req, res) {
    console.log("end middleware function");
    res.send("page render finished");
});

app.listen(port);
console.log('start server');

তবে আপনি অন্য পদ্ধতিটি ব্যবহার করতে পারেন এবং প্রতিটি মিডলওয়্যারকে ফাংশন আর্গুমেন্ট হিসাবে পাস করতে পারেন। এখানে মুলটুলস নোডেজ ওয়েবসাইটের একটি উদাহরণ যেখানে মিডলওয়্যারটি responseক্লায়েন্টকে ফেরত পাঠানোর আগে টুইটার, গিথুব এবং ব্লগ প্রবাহ পায় । আর্গুমেন্ট হিসাবে কীভাবে ফাংশনগুলি পাস হবে তা নোট করুন app.get('/', githubEvents, twitter, getLatestBlog, function(req, res){। ব্যবহারের app.getজন্য কেবল জিইটি অনুরোধের app.useজন্য ডাকা হবে , সমস্ত অনুরোধের জন্য ডাকা হবে।

// github, twitter & blog feeds
var githubEvents = require('./middleware/githubEvents')({
    org: 'mootools'
});
var twitter = require('./middleware/twitter')();
var blogData = require('./blog/data');
function getLatestBlog(req, res, next){
    blogData.get(function(err, blog) {
        if (err) next(err);
        res.locals.lastBlogPost = blog.posts[0];
        next();
    });
}

// home
app.get('/', githubEvents, twitter, getLatestBlog, function(req, res){
    res.render('index', {
        title: 'MooTools',
        site: 'mootools',
        lastBlogPost: res.locals.lastBlogPost,
        tweetFeed: res.locals.twitter
    });
});

2
আমি একটি উত্তর খুঁজছিলাম এক্সপ্রেস.জেএস কি রুট ভিত্তিক (নয় রাউটার ভিত্তিক) মিডলওয়্যার মাউন্টিং সমর্থন করে? দেখে মনে হচ্ছে আপনি এটি নিজের উত্তরে দেখিয়েছেন।
সেলুক

আপনি কি আপনার উপরের উদাহরণটি ব্যাখ্যা করতে পারেন ?, আপনি কীভাবে এতগুলি ফাংশনে অ্যাপ.জেট (...) এ পাস করতে পারেন এবং তাদের কী আদেশ বলা হয়?
ট্যানার গ্রীষ্ম 15

2
হাই @ ট্যাননারস্মার্স, .get()পদ্ধতিটিতে 3 ধরণের আর্গুমেন্ট নেওয়া হয়: প্রথম, শেষ এবং মাঝেরটি । 2 টির চেয়ে বেশি যুক্তি আছে কিনা তা অভ্যন্তরীণভাবে সনাক্ত করে এবং সেগুলি (মধ্যবর্তীগুলি) মিডওয়্যার ফাংশন হিসাবে ব্যবহার করে, তাদের বাম থেকে ডানে ডেকে আনে।
সার্জিও

22

এক্সপ্রেস গাইড আপনার প্রশ্নের সুন্দর ঝরঝরে উত্তর আছে, আমি আপনাকে এটি পড়ার জন্য সুপারিশ করছি, আমি গাইডের একটি ছোট স্নিপেট পোস্ট করছি, গাইডটি বেশ ভাল।

এক্সপ্রেস অ্যাপ্লিকেশনগুলিতে ব্যবহারের জন্য মিডলওয়্যার রচনা করা

সংক্ষিপ্ত বিবরণ

মিডলওয়্যার ফাংশনগুলি হ'ল ফাংশন যা রিকোয়েস্ট অবজেক্ট ( req ), রেসপন্স অবজেক্ট ( res )অ্যাক্সেস করে ) এবং অ্যাপ্লিকেশনটির অনুরোধ-প্রতিক্রিয়া চক্রের পরবর্তী ফাংশন । পরবর্তী ফাংশনটি এক্সপ্রেস রাউটারের একটি ফাংশন যা চালু করা হলে, মিডলওয়্যারকে বর্তমান মিডওয়্যারের সাফল্যে কার্যকর করে।

মিডলওয়্যার ফাংশনগুলি নিম্নলিখিত কাজগুলি সম্পাদন করতে পারে:

  • যে কোনও কোড কার্যকর করুন।
  • অনুরোধ এবং প্রতিক্রিয়া অবজেক্টে পরিবর্তন করুন।
  • অনুরোধ-প্রতিক্রিয়া চক্র শেষ করুন।
  • স্ট্যাকের পরবর্তী মিডওয়্যারের সাথে কল করুন।

যদি বর্তমান মিডলওয়্যার ফাংশনটি অনুরোধ-প্রতিক্রিয়া চক্রটি শেষ না করে, তবে পরবর্তী মিডলওয়্যার ফাংশনে নিয়ন্ত্রণ পাস করার জন্য এটি অবশ্যই পরবর্তী () কল করতে হবে। অন্যথায়, অনুরোধটি ঝুলন্ত অবস্থায় থাকবে।

এখানে চিত্র বর্ণনা লিখুন

উদাহরণ

এখানে একটি সাধারণ "হ্যালো ওয়ার্ল্ড" এক্সপ্রেস অ্যাপ্লিকেশনটির উদাহরণ রয়েছে। এই নিবন্ধটির অবশিষ্ট অংশটি অ্যাপ্লিকেশনটিতে দুটি মিডলওয়্যার ফাংশন সংজ্ঞায়িত করবে এবং যুক্ত করবে: একটি মাইলোগার যাকে একটি সাধারণ লগ বার্তা প্রিন্ট করে এবং আরেকটি নামক রিকোয়েস্টটাইম 1 যা এইচটিটিপি অনুরোধের টাইমস্ট্যাম্প প্রদর্শন করে।

var express = require('express')
var app = express()

app.get('/', function (req, res) {
  res.send('Hello World!')
})

app.listen(3000)   

মিডলওয়্যার ফাংশন myLogger

এখানে "মাইলগার" নামে পরিচিত মিডলওয়্যার ফাংশনের একটি সাধারণ উদাহরণ। এই ফাংশনটি কেবলমাত্র "LOGGED" মুদ্রণ করে যখন অ্যাপ্লিকেশনটিতে একটি অনুরোধ এটির মধ্য দিয়ে যায়। মিডলওয়্যার ফাংশনটি myLogger নামের একটি ভেরিয়েবলের জন্য বরাদ্দ করা হয়েছে।

var myLogger = function (req, res, next) {
  console.log('LOGGED')
  next()
}

পরবর্তী () এর উপরের কলটি লক্ষ্য করুন । এই ফাংশনটি কল করা অ্যাপ্লিকেশনটিতে পরবর্তী মিডলওয়্যার ফাংশনটি আহ্বান করে। পরবর্তী () ফাংশন node.js অথবা এক্সপ্রেস API- এর একটি অংশ নয়, কিন্তু তৃতীয় যুক্তি হল যে মিডলওয়্যার ফাংশন প্রেরণ করা হয়। পরবর্তী () ফাংশন কিছু নামে করা যায়নি, কিন্তু কনভেনশন দ্বারা এটা সবসময় "পরবর্তী" নামকরণ করা হয়। বিভ্রান্তি এড়াতে, সর্বদা এই সম্মেলনটি ব্যবহার করুন।

মিডলওয়্যার ফাংশনটি লোড করতে মিডলওয়্যার ফাংশন নির্দিষ্ট করে অ্যাপ.ইউজ () কল করুন । উদাহরণস্বরূপ, নীচের কোডটি মূল পাথ (/) এর পথে যাওয়ার আগে মাইলোগার মিডলওয়্যার ফাংশনটি লোড করে ।

var express = require('express')
var app = express()

var myLogger = function (req, res, next) {
  console.log('LOGGED')
  next()
}

app.use(myLogger)

app.get('/', function (req, res) {
  res.send('Hello World!')
})

app.listen(3000)

অ্যাপটি যখনই কোনও অনুরোধ পেয়েছে তখনই এটি টার্মিনালে "LOGGED" বার্তাটি মুদ্রণ করে।

মিডলওয়্যার লোডিংয়ের ক্রমটি গুরুত্বপূর্ণ: মিডলওয়্যার ফাংশনগুলি যা প্রথমে লোড হয় সেগুলিও প্রথমে কার্যকর করা হয়।

মাইলোগারটি যদি রুটের পথে যাওয়ার পরে লোড হয় তবে অনুরোধটি কখনই পৌঁছায় না এবং অ্যাপ্লিকেশনটি "LOGGED" মুদ্রণ করে না, কারণ মূল পাথটির রুট হ্যান্ডলার অনুরোধ-প্রতিক্রিয়া চক্রটি বন্ধ করে দেয়।

মিডলওয়্যার ফাংশন myLogger কেবল একটি বার্তা মুদ্রণ করে, তারপরে অনুরোধটি স্ট্যাকের পরবর্তী মিডওয়্যার ফাংশনে অনুরোধ করে পরবর্তী () ফাংশনটি কল করে ।


  1. এই পোস্টটিতে কেবল মাইলগার মিডলওয়্যার থাকবে, পরবর্তী পোস্টের জন্য আপনি এখানে মূল এক্সপ্রেস গাইডে যেতে পারেন ।


1
খুব সুন্দর ব্যাখ্যা।
ড্রামবেগ

এক্সপ্রেস সাইটে এটি এক্সপ্রেস সাইট এ উপলব্ধ /en/guide/writing-middleware.html , এটি সত্যিই ভাল। আমি অবাক হয়েছি কেন এখনও পর্যন্ত কেউ এটি উল্লেখ করেনি?
সুরজ জৈন

2
সুন্দর. এটি এখানে আমি স্পষ্ট ব্যাখ্যা পেয়েছি এবং হ্যাঁ, আশ্চর্যের বিষয় যে এটির কোনও উল্লেখ নেই!
ড্রামবেগ

1
সুন্দরভাবে ব্যাখ্যা করা হয়েছে
রেহান শিকলকালগার

মিডলওয়্যার লোডিংয়ের ক্রমটি গুরুত্বপূর্ণ: মিডলওয়্যার ফাংশনগুলি যা প্রথমে লোড হয় সেগুলিও প্রথমে কার্যকর করা হয়। : এটি একটি গুরুত্বপূর্ণ নোট। অন্য কোনও উত্তরে এর উল্লেখ নেই। যে শিশুটি কেবল অজগর নিয়ে কাজ করেছিল তাদের পক্ষে এটি অত্যন্ত গুরুত্বপূর্ণ কারণ এই জিনিসগুলির মুখোমুখি কখনও না হয়েছিল।
টেসারাকটার

11

===== খুব সাধারণ ব্যাখ্যা =====

মিডলওয়্যারগুলি প্রায়শই এক্সপ্রেস.জেএস ফ্রেমওয়ার্কের প্রসঙ্গে ব্যবহৃত হয় এবং নোড.জেএসের জন্য এটি একটি মৌলিক ধারণা। সংক্ষেপে, এটি মূলত এমন একটি ফাংশন যা আপনার আবেদনের অনুরোধ এবং প্রতিক্রিয়া অবজেক্টগুলিতে অ্যাক্সেস করে। আমি এটি সম্পর্কে যেভাবে ভাবতে চাইছি তা হল 'চেক / প্রি-স্ক্রিন' একটি সিরিজ যা অনুরোধটি অ্যাপ্লিকেশনটির মাধ্যমে পরিচালিত হওয়ার আগে চলে। উদাহরণস্বরূপ, অনুরোধটি অনুমোদনের আগে বা অনুরোধটি অনুমোদন না করা বা প্রতিটি অনুরোধটি লগিংয়ের জন্য লগইন পৃষ্ঠাটি ফেরত দেওয়ার আগে অনুরোধটি অনুমোদিত হয়েছে কিনা তা নির্ধারণ করার জন্য মিডলওয়্যারগুলি ভাল ফিট হবে। প্রচুর তৃতীয় পক্ষের মিডলওয়্যারগুলি উপলব্ধ যা বিভিন্ন কার্যকারিতা সক্ষম করে।

সাধারণ মিডলওয়্যার উদাহরণ:

var app = express();
app.use(function(req,res,next)){
    console.log("Request URL - "req.url);
    next();
}

উপরের কোডটি প্রতিটি অনুরোধের জন্য কার্যকর করা হবে যা অনুরোধটি আসে এবং অনুরোধ ইউআরএল লগ করে, পরবর্তী () পদ্ধতিটি মূলত প্রোগ্রামটি চালিয়ে যাওয়ার অনুমতি দেয়। যদি পরবর্তী () ফাংশনটি না চাওয়া হয় তবে প্রোগ্রামটি আর অগ্রসর হবে না এবং মিডওয়্যারটি কার্যকর করার সময় থামবে।

মিডলওয়্যার গোটচসের একটি দম্পতি:

  1. আপনার অ্যাপ্লিকেশনটির মিডলওয়্যারগুলির ক্রমটি গুরুত্বপূর্ণ, কারণ অনুরোধটি প্রতিটি ক্রম অনুসারে চলে।
  2. আপনার মিডলওয়্যার ফাংশনে পরবর্তী () পদ্ধতিতে কল করতে ভুলে যাওয়া আপনার অনুরোধটির প্রক্রিয়াজাতকরণ বন্ধ করতে পারে।
  3. মিডওয়্যার ফাংশনে রেইক এবং রেস বস্তুগুলির যে কোনও পরিবর্তন, সেই পরিবর্তনটি অ্যাপ্লিকেশনের অন্যান্য অংশগুলিতে উপলব্ধ করে যা পুনরায় এবং পুনরায় ব্যবহার করে

1
আপনাকে অনেক ধন্যবাদ! এটি বোঝার জন্য এটি এখন পর্যন্ত সেরা ব্যাখ্যা। একটি প্রশ্ন, আমি মিডলওয়্যার সহ কিছু কোড পড়ছি এবং এটি কল করে না next()তবে return next()। পার্থক্য কি?
কানসাইরোবট

আন্তরিক শব্দের জন্য অনেক বন্ধুকে ধন্যবাদ next()জানাই ... আমরা পরবর্তী মিডওয়্যারটি কল করতে চাই বলেই করি, আমার মনে হয় না next()বা return next()কোনও পার্থক্য করা উচিত! তবুও এটি কোডটি কী তার উপর নির্ভর করে ...
বৈভব বাচ্চাভ

7

মিডলওয়্যারগুলি ইনপুট / উত্সের পরে মাঝখানে সঞ্চালিত ফাংশন হয় তারপরে একটি আউটপুট উত্পাদন করে যা চূড়ান্ত আউটপুট হতে পারে বা চক্র সম্পূর্ণ না হওয়া পর্যন্ত পরবর্তী মিডলওয়্যার দ্বারা ব্যবহৃত হতে পারে।

এটি এমন একটি পণ্যের মতো যা একটি সমাবেশ লাইনের মধ্য দিয়ে যায় যেখানে এটি সম্পন্ন হওয়া, মূল্যায়ন না করা বা প্রত্যাখ্যান না হওয়া অবধি চালিত হওয়ার সাথে সাথে এটি পরিবর্তিত হয়।

মিডলওয়্যারটি কিছু মান (যেমন প্যারামিটার মানগুলি) কাজ করে এবং কিছু যুক্তির উপর ভিত্তি করে মিডওয়্যারটি পরবর্তী মিডওয়্যারের সাথে কল করবে না বা ক্লায়েন্টকে কোনও প্রতিক্রিয়া পাঠাবে send

আপনি যদি এখনও মিডলওয়্যার ধারণাটি উপলব্ধি করতে না পারেন তবে এটি কোনওভাবে সাজসজ্জার বা কমান্ড প্যাটার্নের চেইনের অনুরূপ।


5

মিডলওয়্যারটি চেইন ফাংশনগুলির একটি উপসেট যা এক্সপ্রেস জেএস রাউটিং স্তর দ্বারা ব্যবহারকারী-সংজ্ঞায়িত হ্যান্ডলারটি চালিত হওয়ার আগে ডাকা হয়। মিডলওয়্যার ফাংশনগুলির অনুরোধ এবং প্রতিক্রিয়া অবজেক্টগুলিতে সম্পূর্ণ অ্যাক্সেস রয়েছে এবং সেগুলির মধ্যে দুটিও সংশোধন করতে পারে।

মিডলওয়্যার চেইনটিকে সর্বদা যথাযথ ক্রম হিসাবে ডাকা হয় যেখানে এটি সংজ্ঞায়িত করা হয়েছে, সুতরাং মিডলওয়্যারের একটি নির্দিষ্ট অংশটি ঠিক কী করছে তা জানা আপনার পক্ষে গুরুত্বপূর্ণ।
কোনও মিডলওয়্যার ফাংশন শেষ হয়ে গেলে, এটি শৃঙ্খলে পরবর্তী ফাংশনটিকে তার পরবর্তী যুক্তিটিকে ফাংশন হিসাবে ডাকে।
সম্পূর্ণ শৃঙ্খলা কার্যকর হওয়ার পরে, ব্যবহারকারীকে অনুরোধ হ্যান্ডলারটি ডাকা হয়।


1

জিনিস সহজ রাখুন, মানুষ!

বিঃদ্রঃ: উত্তরটি এক্সপ্রেসজেএস বিল্টিন মিডলওয়্যারের ক্ষেত্রে সম্পর্কিত, তবে মিডলওয়্যারগুলির বিভিন্ন সংজ্ঞা এবং ব্যবহারের ক্ষেত্রে রয়েছে।

আমার দৃষ্টিকোণ থেকে, মিডলওয়্যারটি ইউটিলিটি বা সহায়ক সহায়ক হিসাবে কাজ করে তবে এর অ্যাক্টিভেশন এবং ব্যবহারটি সম্পূর্ণরূপে al চ্ছিকভাবে এটি ব্যবহার করে app.use('path', /* define or use builtin middleware */)আমাদের ক্লায়েন্টের প্রতিটি এইচটিটিপি অনুরোধের জন্য প্রয়োজনীয় খুব সাধারণ কাজগুলি করার জন্য কিছু কোড লিখতে চায় না for কুকি প্রক্রিয়াজাতকরণ, সিএসআরএফ টোকেন এবং ..., যা বেশিরভাগ অ্যাপ্লিকেশনগুলিতে খুব সাধারণ, তাই মিডলওয়্যার আমাদের ক্লায়েন্টের প্রতিটি এইচটিটিপি অনুরোধের জন্য কিছু স্ট্যাক, ক্রম বা ক্রিয়াকলাপের ক্রিয়ায় সহায়তা করতে পারে তারপরে প্রক্রিয়াটির ফলাফল প্রদান করে ক্লায়েন্ট অনুরোধের একটি একক

উদাহরণ:

ক্লায়েন্টদের অনুরোধগুলি গ্রহণ করা এবং তাদের অনুরোধ অনুসারে তাদের প্রতিক্রিয়া জানানো ওয়েব সার্ভার প্রযুক্তির প্রকৃতি।

কল্পনা করুন যে আমরা যদি কেবল "হ্যালো, বিশ্ব!" দিয়ে প্রতিক্রিয়া সরবরাহ করছি! আমাদের ওয়েব সার্ভারের মূল ইউআরআই-তে একটি জিইটি এইচটিটিপি অনুরোধের জন্য পাঠ্যটি খুব সাধারণ দৃশ্যাবলী এবং অন্য কোনও কিছুর প্রয়োজন নেই, পরিবর্তে যদি আমরা বর্তমানে লগ-ইন করা ব্যবহারকারীকে পরীক্ষা করে দেখি এবং তারপরে "হ্যালো, ব্যবহারকারীর নাম!" এক্ষেত্রে সাধারণের চেয়ে আরও বেশি কিছু প্রয়োজন আমাদের সমস্ত ক্লায়েন্টের অনুরোধ মেটাডেটা প্রক্রিয়া করার জন্য মিডলওয়্যারের প্রয়োজন এবং ক্লায়েন্টের অনুরোধ থেকে ধরা শনাক্তকরণ তথ্য সরবরাহ করুন তারপরে সেই তথ্য অনুসারে আমরা আমাদের বর্তমান ব্যবহারকারীকে অনন্যভাবে সনাক্ত করতে পারি এবং তার প্রতিক্রিয়া জানানো সম্ভব possible / তার সাথে সম্পর্কিত কিছু ডেটা।

আশা করি কারও সাহায্য করবে!


-1

খুব বেসিক টার্মে যদি আমি এটির মতো ব্যাখ্যা করতে চাই তবে আমি এটি ট্র্যাভারসেমিডিয়া ইউটিউব চ্যানেল এক্সপ্রেস ক্র্যাশ কোর্স থেকে শিখি।
ঠিক আছে তাই মাঝারি জিনিসটি এমন একটি ফাংশন যা আপনার রুটটিতে এভাবে কল করার পরে কার্যকর করে।

var logger = function(req, res, next){
   console.log('logging...');
   next();
}

app.use(logger);

এই লগার ফাংশনটি প্রতিবার কার্যকর হয় যখন আপনি আপনার পৃষ্ঠাটি রিফ্রেশ করে যার অর্থ আপনি আপনার পৃষ্ঠায় কোনও অপারেশন এপিআই কল রেন্ডার করার পরে যা কিছু করার দরকার তা আপনি লিখতে পারেন, মূলত কিছু রিসেট করুন। আপনার মিডলওয়্যারের রুট ফাংশন ক্রমটি সত্যই গুরুত্বপূর্ণ বা এটি কাজ করে না তার আগে এই মিডলওয়্যারটি রাখুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.