2015-10-31 6 views
22

कुछ समान प्रश्न पूछे गए हैं लेकिन मेरा सवाल यह है कि यदि मैं मध्यवर्ती परिणामों को प्रचारित करना चाहता हूं जो मुझे मिलता है विभिन्न रूटिंग मिडलवेयर के साथ, ऐसा करने का सबसे अच्छा तरीका क्या है?req.locals बनाम res.locals बनाम res.data बनाम req.data बनाम app.locals एक्सप्रेस मिडलवेयर

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(); 
} 
// ... 

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

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

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

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

उत्तर

57

आप उल्लेख किया है, दोनों req.locals, res.locals या यहाँ तक कि अपनी खुद की कुंजी res.userData इस्तेमाल किया जा सकता परिभाषित किया। नामकरण के अलावा, कोई वास्तविक अंतर नहीं है। इसका अर्थ है कि मैं फिर भी res.locals उपयोग करने के लिए के रूप में यह केवल एक आधिकारिक Express.js दस्तावेज में उल्लेख किया है की सिफारिश करेंगे:

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

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

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

क्योंकि यह आधिकारिक तौर पर दस्तावेज़ीकरण किया गया है, वहाँ res.locals संपत्ति कभी कुछ और (पश्च संगतता) के लिए इस्तेमाल किया जा रहा की संभावना उतनी ही कम है। यदि आप अपनी खुद की कुंजी चुनते हैं, तो हमेशा एक मौका है Express.js के भविष्य के संस्करण आपके डेटा को ओवरराइट करेंगे क्योंकि वे एक ही कुंजी का उपयोग करते हैं। यह res.locals का उपयोग करते समय नहीं होगा। यह नए लोगों को आपके कोड को समझना भी आसान बनाता है क्योंकि अधिकांश परियोजनाएं मिडलवेयर डेटा स्टोर करने के लिए res.locals का उपयोग करती हैं।

+0

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

संबंधित मुद्दे