2016-01-01 7 views
11

मैं एक्सप्रेस का उपयोग कर रहा हूं और जब भी मैं डीबग करने और मेरे ऐप का पता लगाने के लिए लॉग का उपयोग करता हूं तो मुझे अनुरोध (हेडर, कुकीज इत्यादि) पर कुछ डेटा तक पहुंचने की आवश्यकता होती है।एक्सेस अनुरोध संदर्भ कहीं भी

अन्य भाषाओं के साथ (यानी जावा) मेरे पास "थ्रेड संदर्भ" है जहां मैं वह डेटा डाल सकता हूं, और जब भी मैं कुछ लॉग करता हूं तो इसे एक्सेस कर सकता हूं। लेकिन नोडजेएस के साथ ऐसी कोई चीज नहीं है, जहां तक ​​मुझे पता है, क्योंकि हमारे पास केवल एक धागा है।

मैं प्रत्येक फ़ंक्शन में req चर पारित करने से बचने की कोशिश कर रहा हूं, इसलिए मैं उस जानकारी को लॉग कर सकता हूं।

क्या कोई नोड या एक्सप्रेसज सुविधा है जो मुझे डेटा कहीं भी प्राप्त करने देती है?

+2

मॉड्यूल हैं - लेकिन ईमानदारी से निहित अनुरोध-वैश्विक चर भयानक हैं और आपको जितना संभव हो उतना टालना चाहिए। केवल आपके मार्ग हैंडलर को ही अनुरोध का उपयोग करना चाहिए और फिर उन हिस्सों को केवल प्रासंगिक बिट्स पास करना चाहिए जिनकी आवश्यकता है। –

+1

@ स्वीकार करें कि यह एक वैध सवाल है - मुझे लगता है कि इसे "मॉड्यूल है" कहने वाले हिस्से को हटाकर और अधिक वैध होने के लिए संपादित किया जा सकता है और इसे छोड़ दें "क्या कोई एक्सप्रेस या नोड सुविधा है" –

+0

नियुक्विनो - देखें @ बेंजामिनग्रेनबाम टिप्पणी। कृपया अपना प्रश्न संपादित करें। – Amit

उत्तर

-2

तथ्य यह है कि जावास्क्रिप्ट एकल धागा है, यह एक सीमा नहीं है और "थ्रेड संदर्भ" का उपयोग "सार्वभौमिक रूप से सुलभ स्थिति" का उपयोग करने के साधन के रूप में नहीं रोकता है। जैसे ही एसिंक्रोनस कॉल किए जाते हैं, समस्याएं शुरू हो जाएंगी और राज्य अब आपके द्वारा किए जाने वाले कार्यों से मेल नहीं खाता है।

वैश्विक कारणों को "बुरी आदत" माना जाता है और आपको इसे टालना चाहिए (विशेष रूप से जावास्क्रिप्ट और/या नोड में विकसित होने पर ...)।

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

+6

मुझे नहीं लगता कि लॉगिंग के लिए मेरे सभी मॉड्यूल में मेरे सभी कार्यों में अतिरिक्त तर्क जोड़ना एक सुरुचिपूर्ण समाधान होगा। मुझे पता है कि यह 'var log = requ (' myLog ') जितना आसान नहीं होगा; log.debug ('कुछ') '। लेकिन मैं ऐसा कुछ हासिल करने की कोशिश कर रहा हूं। – Neuquino

+3

बेशक वहाँ तरीके हैं - सबसे तुच्छ हैं: डोमेन, जोन, वादा पुस्तकालय जो बाध्य (जैसे ब्लूबर्ड), फाइबर आदि के साथ संदर्भ प्रदान करते हैं। –

+0

@Neuquino जो तंग कोड युग्मन का कारण बनता है, परीक्षण को कठिन बना देगा, आपको अपनी लॉगिंग योजना बदलने से रोक देगा (यदि आप अधिक संदर्भ चाहते हैं, लेकिन केवल 'req'?) और जैसे ही एकाधिक संदर्भ हैं, तब भी काम नहीं करेंगे एक साथ की जरूरत है (एसिंक्रोनस कोड के माध्यम से)। – Amit

10

निरंतरता स्थानीय संग्रह पर एक नज़र डालें, तो यह कुछ इसी तरह अतुल्यकालिक कॉल श्रृंखला के लिए संदर्भ सूत्र में बाँधना लागू करता है: https://github.com/othiym23/node-continuation-local-storage

इसके अलावा जावास्क्रिप्ट में ही एक मानकीकृत सुविधा के रूप में अतुल्यकालिक स्थानीय भंडारण का निर्माण करने के प्रयासों को कर रहे हैं, लेकिन वे अभी भी कर रहे हैं बहुत शुरुआती चरण में: टीसी 3 9 जोन प्रस्ताव https://docs.google.com/presentation/d/1H3E2ToJ8VHgZS8eS6bRv-vg5OksObj5wv6gyzJJwOK0

+0

इसे सही उत्तर के रूप में चिह्नित किया जाना चाहिए। वर्तमान में ध्वजांकित सही उत्तर सही ढंग से प्रश्न का उत्तर नहीं देता है। – adam

+0

इस लाइब्रेरी से सावधान रहें क्योंकि यह मेरी राय में छोटी है। मैंने बहुआयामी ऐप समाधान बनाते समय इसकी कोशिश की और जब मैंने तनाव परीक्षण किया तो यह पुस्तकालय संदर्भ खो रहा था। मैं हर समारोह में अनुरोध संदर्भ पारित कर दिया जहां मुझे इसकी आवश्यकता थी। पहली बार यह अच्छा लगता है, लेकिन मेरी राय में अंतर्निहित से बेहतर स्पष्ट नहीं है। – Alex

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