त्वरित नोट: यदि आपने JWT प्रमाणीकरण पर मेरी पिछली पोस्ट देखी है और कुछ रेंडरिंग समस्याएं देखी हैं, तो उन्हें अब ठीक कर दिया गया है! इसे एक और रूप देना सुनिश्चित करें क्योंकि ये उदाहरण उस ट्यूटोरियल के शीर्ष पर बने हैं। :)
ठीक है दोस्तों, हमें अपना Go API चालू है, हमने JWT प्रमाणीकरण जोड़ा है, और हमने इसे PostgreSQL डेटाबेस से भी जोड़ा है। लेकिन हमने अभी तक काम पूरा नहीं किया है! इस सप्ताह, हम चीजों को एक पायदान ऊपर ले जा रहे हैं और लॉगिंग और त्रुटि प्रबंधन। मिडलवेयर फिर क्या है? ? मिडिलवेयर आपके पसंदीदा क्लब में बाउंसर की तरह है - यह आपके एपीआई एंडपॉइंट तक पहुंचने से पहले अनुरोधों को रोकता है। आपके पास मिडलवेयर हो सकता है जो प्रमाणीकरण की जांच करता है (जैसा कि हमने जेडब्ल्यूटी के साथ किया था), जानकारी लॉग करता है, या चीजें गलत होने पर त्रुटियों को संभालता है।
लॉग
: हर आने वाला अनुरोध, ताकि हम जान सकें कि हमारे एपीआई का दरवाजा कौन खटखटा रहा है।जब डिबगिंग और आपके एपीआई में क्या हो रहा है, इसे समझने की बात आती है तो लॉगिंग आपका सबसे अच्छा दोस्त है। हम एक ऐसा मिडलवेयर बनाने जा रहे हैं जो आने वाले हर अनुरोध-विधि, यूआरएल और लगने वाले समय को लॉग करता है।
उन लोगों के लिए जो लॉगिंग मिडलवेयर में गहराई से गोता लगाने में रुचि रखते हैं, मैं गो में लॉगिंग मिडलवेयर लिखने पर मैट सिल्वरलॉक की शानदार मार्गदर्शिका की जांच करने की सलाह देता हूं। वह बताता है कि प्रमाणीकरण, ट्रेसिंग और निश्चित रूप से लॉगिंग जैसे विभिन्न उपयोग के मामलों के लिए पुन: प्रयोज्य मिडलवेयर की संरचना कैसे की जाए!
func loggingMiddleware(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { start := time.Now() // Log the method and the requested URL log.Printf("Started %s %s", r.Method, r.URL.Path) // Call the next handler in the chain next.ServeHTTP(w, r) // Log how long it took log.Printf("Completed in %v", time.Since(start)) }) }
आइए त्रुटियों के बारे में बात करते हैं। त्रुटियाँ होती हैं, है ना? लेकिन उन्हें दुर्घटना का कारण बनने या अस्पष्ट त्रुटि संदेश भेजने की बजाय, आइए उन्हें शालीनता से संभालें।
चरण 3: अपने एपीआई में मिडलवेयर को एकीकृत करना?
func errorHandlingMiddleware(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { defer func() { if err := recover(); err != nil { // Log the error and send a user-friendly message log.Printf("Error occurred: %v", err) http.Error(w, "Internal Server Error", http.StatusInternalServerError) } }() next.ServeHTTP(w, r) }) }अब जब हमने अपना लॉगिंग और एरर-हैंडलिंग मिडलवेयर बना लिया है, तो आइए उन्हें हमारे एपीआई से जोड़ दें। हम उन्हें विश्व स्तर पर लागू करेंगे ताकि प्रत्येक अनुरोध लॉग हो जाए और त्रुटियाँ पकड़ी जाएँ।
चरण 4: इसका परीक्षण करना?
func errorHandlingMiddleware(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { defer func() { if err := recover(); err != nil { // Log the error and send a user-friendly message log.Printf("Error occurred: %v", err) http.Error(w, "Internal Server Error", http.StatusInternalServerError) } }() next.ServeHTTP(w, r) }) }यह सुनिश्चित करने के लिए कि सब कुछ काम कर रहा है, अपना एपीआई शुरू करें:
अब, अपने किसी भी अंतिम बिंदु (जैसे /किताबें) पर पहुंचने का प्रयास करें और अपने टर्मिनल की जांच करें। आपको इस तरह के लॉग देखने चाहिए:
go run main.go
और यदि कोई त्रुटि है, तो आप देखेंगे:
Started GET /books Completed in 1.2ms
लेकिन आपके उपयोगकर्ता को केवल एक साफ़ "500 आंतरिक सर्वर त्रुटि" संदेश दिखाई देगा। ?
func errorHandlingMiddleware(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { defer func() { if err := recover(); err != nil { // Log the error and send a user-friendly message log.Printf("Error occurred: %v", err) http.Error(w, "Internal Server Error", http.StatusInternalServerError) } }() next.ServeHTTP(w, r) }) }यह महत्वपूर्ण क्यों है?
त्रुटि प्रबंधन
आगे क्या होगा?
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3