यह मिलान मार्ग पर नियंत्रण पास करता है। उदाहरण के लिए, उदाहरण के लिए, यदि आप id
दिए गए थे, तो आप डेटाबेस में उपयोगकर्ता को देख सकते हैं, और इसे req.user
पर असाइन करें।
के नीचे, आपको एक मार्ग हो सकता है:
app.get('/users', function(req, res) {
// check for and maybe do something with req.user
});
के बाद से/उपयोगकर्ताओं/123 पहली बार अपने उदाहरण में मार्ग, कि पहले की जाँच करें और उपयोगकर्ता 123
मिलेगा से मेल खाएगा; तो /users
इसके परिणामस्वरूप कुछ कर सकता है।
Route middleware (नोट: लिंक 2.x दस्तावेज है, लेकिन यह 3.x पर काम करने के रूप में परीक्षण किया जाता है) एक और अधिक लचीला और शक्तिशाली उपकरण है, हालांकि, मेरी राय में, क्योंकि यह किसी विशेष पर भरोसा नहीं करता है यूआरआई योजना या मार्ग आदेश। मैं उदाहरण कुछ ऐसा दिखाया मॉडल करने के लिए, एक async findOne()
के साथ एक Users
मॉडल मानते हुए इच्छुक होगी:
function loadUser(req, res, next) {
if (req.params.userId) {
Users.findOne({ id: req.params.userId }, function(err, user) {
if (err) {
next(new Error("Couldn't find user: " + err));
return;
}
req.user = user;
next();
});
} else {
next();
}
}
// ...
app.get('/user/:userId', loadUser, function(req, res) {
// do something with req.user
});
app.get('/users/:userId?', loadUser, function(req, res) {
// if req.user was set, it's because userId was specified (and we found the user).
});
// Pretend there's a "loadItem()" which operates similarly, but with itemId.
app.get('/item/:itemId/addTo/:userId', loadItem, loadUser, function(req, res) {
req.user.items.append(req.item.name);
});
प्रवाह को नियंत्रित करने में सक्षम होने के नाते की तरह यह बहुत आसान है। हो सकता है कि आप कुछ पेज केवल व्यवस्थापक ध्वज वाले उपयोगकर्ताओं के लिए उपलब्ध हो:
/**
* Only allows the page to be accessed if the user is an admin.
* Requires use of `loadUser` middleware.
*/
function requireAdmin(req, res, next) {
if (!req.user || !req.user.admin) {
next(new Error("Permission denied."));
return;
}
next();
}
app.get('/top/secret', loadUser, requireAdmin, function(req, res) {
res.send('blahblahblah');
});
आशा है कि इससे आपको कुछ प्रेरणा मिलेगी!
अगला अगले अनुरोध को संभालने के लिए अगले रूट हैंडलर को बस अनुमति देता है। इस मामले में, यदि उपयोगकर्ता आईडी मौजूद है, तो अनुरोध को पूरा करने के लिए यह संभवतः 'res.send' का उपयोग करेगा। यदि यह अस्तित्व में नहीं है, तो संभवतः एक और हैंडलर है जो एक त्रुटि जारी करेगा और अनुरोध को पूरा करेगा। –
तो आप कह रहे हैं कि मेरे पास 'app.post ('/ login', function (req, res))' 'app.get ('/ users', function (req, res) के बाद है) 'यह लॉगिन करेगा अगले() को कॉल करके app.js फ़ाइल में अगला मार्ग होने के नाते? – Menztrual
नहीं, आपको Express.js दस्तावेज़ के इस भाग का संदर्भ लेना चाहिए: http://expressjs.com/guide.html#passing-route नियंत्रण –