2012-02-16 25 views
6

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

क्या मैं सिर्फ अपने रेडिस क्लाइंट पर एक ऑन-आतंक विधि परिभाषित कर सकता हूं और यह चाल करेगा? यदि ऐसा हो तो कुछ नमूना कोड? क्या मुझे किसी भी तरह node.js अगली टिक त्रुटि में इसे संभालना चाहिए? मुझे यकीन नहीं है कि मैं अगले बयान को बिल्कुल समझता हूं इसलिए सुनिश्चित नहीं है कि सबसे अच्छा अभ्यास क्या है।

कैच ब्लॉक कभी नहीं भी हिट हो जाता है नीचे दिए गए कोड में अगर एक कनेक्शन त्रुटि

try 
{ 
    feedClient = redis.createClient(feedPort, feedHost); 
} 
catch (error) 
{ 
    console.log('cannnot start redis' + error); 
} 

है यहाँ ध्यान में न आया त्रुटि

node.js:134 
     throw e; // process.nextTick error, or 'error' event on first tick 
     ^
Error: Redis connection to localhost:6379 failed - ECONNREFUSED, Connection refused 
    at RedisClient.on_error (/node_modules/redis/index.js:136:24) 
    at Socket. (/node_modules/redis/index.js:70:14) 
    at Socket.emit (events.js:64:17) 
    at Array. (net.js:830:27) 
    at EventEmitter._tickCallback (node.js:126:26) 
+0

लगभग http://stackoverflow.com/q/8071291/638546 –

उत्तर

11

हाँ, आप एक त्रुटि हैंडलर निर्दिष्ट करने की आवश्यकता है:

feedClient = redis.createClient(feedPort, feedHost); 
feedClient.on("error", function(err) { 
    console.error("Error connecting to redis", err); 
}); 
+2

याहू मैं लगभग हन था इसे एक रेडिस कनेक्शन के लिए डलिंग करना, 3 था, दूसरे दो को संभाला नहीं था, यह समझ नहीं सका कि क्यों बाहर निकल रहा था। +1 –

+0

रेडिस नोड-मॉड्यूल आंतरिक रूप से EventEmitter प्रोटोटाइप कर रहा है। –