मध्यस्थ
मैं एक नई परियोजना में मिडलवेयर की अवधारणा को अलग करने के माध्यम से आधे रास्ते पर हूं।
मिडिलवेयर आपको उन कार्यों के ढेर को परिभाषित करने की अनुमति देता है जिन्हें आपको प्रवाह करना चाहिए। एक्सप्रेस सर्वर स्वयं बिचौलियों के ढेर हैं।
// express
var app = express();
// middleware
var stack = middleware();
तब आप कॉल करके मिडिलवेयर स्टैक में परतें जोड़ सकते हैं .use
// express
app.use(express.static(..));
// middleware
stack.use(function(data, next) {
next();
});
मिडलवेयर स्टैक में एक परत एक फ़ंक्शन है, जो n पैरामीटर (एक्सप्रेस, req
और res
) के लिए 2 और एक next
फ़ंक्शन लेता है ।
मिडलवेयर को उम्मीद है कि परत कुछ गणना करेगी, मापदंडों को बढ़ाएगी और फिर कॉल करेगी next
।
जब तक आप इसे संभाल नहीं लेते तब तक कुछ भी नहीं करता है। एक्सप्रेस हर बार आने वाले HTTP रिक्वेस्ट को सर्वर पर पकड़े जाने पर स्टैक को हैंडल करेगा। मिडलवेयर के साथ आप मैन्युअल रूप से स्टैक को संभालते हैं।
// 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 अनुरोध के लिए हैंडल करना चाहते हैं।
एक्सप्रेस (कनेक्ट के बजाय) के संदर्भ में आपके पास वैश्विक मिडलवेयर और रूट विशिष्ट मिडलवेयर हैं। इसका मतलब है कि आप हर आने वाले HTTP अनुरोधों के लिए एक मिडलवेयर स्टैक संलग्न कर सकते हैं या केवल इसे 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);
});