दिन 25 (सप्ताह 5) - अगले () और वापसी के बीच एक सूक्ष्म अंतर ()

अगले () और अगले () कॉल करने के बीच अंतर को संक्षेप में बताने से पहले, मैं दिन को संक्षेप में प्रस्तुत करना चाहता हूं।

हमारे विशिष्ट फ्राइडे हडल में कुछ घोषणाएं, कैरियर सेवाएं और कुछ अग्रेषित जानकारी और कुछ प्रस्तुतियां शामिल थीं, जिन पर हमने काम किया। अपनी प्रतिक्रिया प्रदान करके, हम कोड के बारे में अपनी बातचीत में सुधार करते हैं। मुझे लगता है कि यह एक अच्छी बात है, हम इसके साथ अधिक समय बिताना पसंद करेंगे। आगे बढ़ने के लिए मेरा एक सुझाव जीथब पर आधिकारिक कोड की समीक्षा करना है, यह जानने के लिए कि हम उपकरण का उपयोग कैसे करते हैं, जो कार्यस्थल में अन्य लोगों के कोड को देखने और व्याख्या करने के लिए उपयोग करते हैं।

मैंने अपने फिर से शुरू होने के बारे में एक-एक बैठक की और जिन कंपनियों के लिए आवेदन करना चाहता था, उनके लिए पत्रों के लिए आवेदन किया। हर कोई इतना संगठित है और आगे बढ़ने के लिए जागरूक है। मैं कह सकता हूं कि आपके पास सॉफ्टवेयर विकास में नौकरी खोजने का गहन अनुभव और ज्ञान है। मुझे उम्मीद है कि मैं इस जानकारी को प्राप्त कर सकता हूं और इस प्रशिक्षण के अंत में नौकरी खोजने के लिए इसका उपयोग कर सकता हूं।

अगले () और अगले () कॉल करने के बीच के अंतर के बारे में मैंने पहली बार कुछ दिनों पहले रात के होमवर्क कोड के माध्यम से काम करते समय इस पर ध्यान दिया था। यह ऐसा ही था।

app.get ('/ post', function (req, res, next) {Post.findById (1234) .then (फंक्शन (पोस्ट, इरेट) {if (त्रुटि) {अगला (गलत);} अगर (पोस्ट) ) {var notFound = नई त्रुटि ('संदेश नहीं मिला!'); notFound.status = 404; अगला लौटाएँ (notFound);} res.send (पोस्ट);});});

यहां हम ट्रैक / पोस्ट पर GET अनुरोध देख रहे हैं। कॉल वापस करते समय ऐसा लगता है कि हम Post.findById को कोई कॉल कर रहे हैं, जो संभवतः एक डेटाबेस क्वेरी है। क्योंकि इसमें डेटाबेस को जोड़ना और वादा वापस करना शामिल है। फिर यह स्पष्ट है - फ़ंक्शन के अंदर देखें। विशेष रूप से, हम देखते हैं कि यदि (त्रुटि) सत्य है, तो हमें अगले (गलत) पर लौटने के लिए कहा जाता है। फिर हमारे पास एक और (पोस्ट) है, यह वापस आएगा (notFound) और अंत में res.send (पोस्ट), जो यदि हमने कोई गलती नहीं की है तो परिणाम भेजेगा और इसमें कुछ जानकारी शामिल है। यह कहते हैं)। ब्राउज़र के लिए डेटाबेस अनुरोध वापस करें।

अन्य उदाहरणों में, मुझे कुछ ऐसा ही दिखाई देगा।

app.get ('/ foo'), CheckRegging (req, res, next) {if (! req.user.registr) {// चेक करें अगर उपयोगकर्ता पंजीकृत नहीं है तो अगले रास्ते पर जाएं // // getRegration विफल रहता है। अगला ('मार्ग')}}, getRegistration फ़ंक्शन (req, res, next) {Register.find (फ़ंक्शन (त्रुटि, डेटा) {if (इरेट) अगले पर लौटें ( ग़लती से) res.json (डेटा)});});

इस उदाहरण में, हम बस ('मार्ग') कहते हैं। इसलिए स्वाभाविक प्रश्न यह है: रिटर्न का उपयोग करने में क्या अंतर है?

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

त्वरित ध्यान दें: यदि आप मार्ग के भीतर अनुरोध को हल नहीं करते हैं, तो याद रखें कि एक्सप्रेस ब्राउज़र को कुछ भी नहीं भेजता है और आपको लटका देता है।

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

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

मेरी समस्या MongoDB के लिए एक अनुरोध भेजने की कोशिश कर रही थी, जहां मेरे ऐप के लिए मेरे सभी उपयोगकर्ता नाम और पासवर्ड संग्रहीत हैं। जब मुझे एक POST अनुरोध मिलता है कि क्लाइंट के पास उसके द्वारा दिया गया उपयोगकर्ता नाम और पासवर्ड है, तो मुझे यह देखने के लिए क्वेरी चलाने की आवश्यकता है कि क्या डेटाबेस में कोई लिंक है या नहीं। यह कॉलबैक फ़ंक्शन के साथ एक एसिंक्रोनस कॉल है। एक्सप्रेस के रूप में, यह डेटाबेस से लौटने के लिए प्रतीक्षा कर रहा है, मेरे कोड को निष्पादित करना जारी रखेगा।

इसका मतलब है कि यह मेरे लिए बुरा है। जैसा कि एक्सप्रेस डेटाबेस से लौटने का इंतजार कर रहा है, निष्पादन प्रगति पर है और मैं त्रुटि संदेश देखना शुरू कर दूंगा।

त्रुटि: भेजने के बाद हेडर स्थापित नहीं कर सके

यह गति तब जारी रहेगी जब मैं वास्तव में इसे नहीं चाहता। जब मैं अगले रिटर्न का उपयोग करना चाहता था (), मैंने अगला इस्तेमाल किया ()।

आज मेरे लिए यह महसूस करना बहुत बड़ा था। दोनों घंटियों के बीच अंतर क्या है, और कुछ दिन पहले खुलने वाले चक्र को समाप्त करना अच्छा है। मैं अब वापस जा सकता हूं और इस परियोजना के लिए अपना कोड साफ कर सकता हूं।

एक आखिरी बात - आज एक नई साप्ताहिक परियोजना सामने आई। हमें एक वेब पेज को एनकोड करने की आवश्यकता है जो आपको हैंगमैन क्लासिक गेम खेलने की सुविधा देता है। मैं इसे इस सप्ताह के अंत में कर रहा हूँ! :-)