req.locals बनाम res.locals बनाम res.data बनाम req.data बनाम app.locals एक्सप्रेस मिडलवेयर में


82

इसी तरह के कुछ सवाल पूछे जाते हैं, लेकिन मेरा सवाल यह है कि अगर मैं इंटरमीडिएट के परिणामों को प्रचारित करना चाहता हूं, जो मुझे अलग-अलग रूटिंग मिडलवेयर के साथ मिलते हैं, तो ऐसा करने का सबसे अच्छा तरीका क्या है?

app.use(f1); app.use(f2); app.use(f3);

function f1(req,res,next) {
  //some database queries are executed and I get results, say x1
  res.locals.dbResults = {...};
  next();
}

function f2(req,res,next) {
  // more processing based upon req.locals.dbResults 
  res.locals.moreResults = {....};
  next();
}
// ...

मुझे लगता है कि मैं req .locals का उपयोग करके विभिन्न मिडलवेयर के माध्यम से डेटा का समान प्रसार प्राप्त कर सकता हूं। इसके अलावा, ऐसा प्रतीत होता है कि अनुरोध के जवाब में दोनों वस्तुएं और प्रतिक्रियाएं स्थानीय लोगों के पास एक खाली वस्तु के लिए शुरू होती हैं।

इसके अलावा, एक res.mydata या req.mydata गुण भी सेट कर सकते हैं?

सिद्धांत रूप में, app.locals का उपयोग अलग-अलग मिडलवेयर के माध्यम से इस डेटा को पारित करने के लिए भी किया जा सकता है, क्योंकि यह मध्य-मध्य में बना रहेगा लेकिन यह app.locals के पारंपरिक उपयोग के विपरीत होगा। इसका उपयोग एप्लिकेशन विशिष्ट डेटा के लिए अधिक किया जाता है। यह भी स्पष्ट करना आवश्यक होगा कि अनुरोध-प्रतिक्रिया चक्र के अंत में डेटा ताकि अगले अनुरोध के लिए समान चर का उपयोग किया जा सके।

मिडलवेयर के माध्यम से मध्यवर्ती परिणामों के प्रचार के लिए इष्टतम और मानक तरीका क्या है?

जवाबों:


151

आप उल्लेख किया है, दोनों req.locals, res.localsया यहां तक कि अपने खुद के परिभाषित कुंजी res.userDataइस्तेमाल किया जा सकता। हालांकि, एक्सप्रेस के साथ एक दृश्य इंजन का उपयोग करते समय, आप res.localsअपने मिडलवेयर में मध्यवर्ती डेटा सेट कर सकते हैं , और वह डेटा आपके दृश्य में उपलब्ध होगा ( यह पोस्ट देखें )। बीच में req.localsओवरराइटिंग व्यू डेटा से बचने के लिए मिडलवेयर के अंदर इंटरमीडिएट डेटा सेट करना आम बात है res.locals, हालांकि यह आधिकारिक रूप से प्रलेखित नहीं है।

res.locals एक ऑब्जेक्ट जिसमें प्रतिक्रिया स्थानीय चर अनुरोध के लिए स्कूप की गई है , और इसलिए केवल उस अनुरोध / प्रतिक्रिया चक्र (यदि कोई हो) के दौरान प्रदान किए गए दृश्य (नों) के लिए उपलब्ध है। अन्यथा, यह संपत्ति समान है app.locals

यह संपत्ति अनुरोध-स्तरीय जानकारी जैसे कि अनुरोध पथ का नाम, प्रमाणित उपयोगकर्ता, उपयोगकर्ता सेटिंग्स, और इसी तरह उजागर करने के लिए उपयोगी है।

स्रोत: http://expressjs.com/en/api.html#res.locals


प्रलेखन भेद पर स्पष्टीकरण के लिए धन्यवाद जो res.locals के पक्ष में काम करता है। आपने मेरी समझ की पुष्टि की है कि सिद्धांत रूप में सभी दृष्टिकोण तकनीकी रूप से समान हैं। अधिक टिप्पणियों की प्रतीक्षा करें आपके उत्तर को उत्कीर्ण किया ... निश्चित रूप से उपयोगी है।
सनी

साइड नोट: res.render()पूर्वता पर ध्यान दें res.locals। तो कोई गलती से चर का ओवरराइट कर सकता हैres.locals = { name: 'Jake' } // later in code... res.render('user.template', { name: 'Tony' }, (err, html) => {}) // the 'name' variable is now 'Tony'
zenoh 14

वैसे भी, अच्छी तरह से नियोजित, स्वच्छ और मॉड्यूलर मिडलवेयर डिज़ाइन एक ही वस्तु की कुंजी पर निर्भर होने की तुलना में बेहतर और दीर्घकालिक समाधान होना चाहिए
ज़ेनोह
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.