মিডলওয়্যার
আমি একটি নতুন প্রকল্পের মিডলওয়্যারের ধারণাটি আলাদা করার মধ্য দিয়ে আছি।
মিডলওয়্যার আপনাকে স্ট্যাকের একটি স্ট্যাক সংজ্ঞায়িত করতে দেয় যা আপনার মধ্য দিয়ে প্রবাহিত হওয়া উচিত। এক্সপ্রেস সার্ভারগুলি তারা মিডলওয়্যারের একটি স্ট্যাক।
// 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);
});