2015-11-16 13 views
9

में sendFile का उपयोग करते समय यादृच्छिक 'ECONNABORTED' त्रुटि मैंने एक्सप्रेस मिडलवेयर के साथ एक नोड सर्वर सेट किया है। मुझे ECONNABORTED त्रुटि कुछ फ़ाइलों पर यादृच्छिक रूप से प्राप्त होती है जो एक HTML फ़ाइल लोड करते समय 10 अन्य लोड (जेएस, सीएसएस, आदि) को ट्रिगर करता है। सटीक त्रुटि है:एक्सप्रेस/नोड

{ [Error: Request aborted] code: 'ECONNABORTED' } 

इस सरलीकृत कोड द्वारा उत्पन्न (के बाद मैं मुद्दे को डीबग करने की कोशिश की):

res.sendFile(res.locals.physicalUrl,function (err) { 
    if (err) 
     console.log(err); 
    ... 
    } 

कई पदों पूरा पथ का नाम निर्दिष्ट नहीं से उत्पन्न इस त्रुटि के बारे में बात करते हैं। यह स्थिति यहां नहीं है। मैं पूरा पथ निर्दिष्ट करता हूं और वास्तव में त्रुटि यादृच्छिक रूप से जेनरेट की जाती है। ऐसे समय होते हैं जब पृष्ठ और उसके बाद के सभी लिंक पूरी तरह से लोड होते हैं और कई बार ऐसा नहीं होता है। मैंने कैश को फ्लश करने की कोशिश की और इसे इसके साथ जोड़ने के लिए कोई पैटर्न नहीं मिला।

यह विशिष्ट त्रुटि सॉकेट कनेक्शन को निरस्त करने के लिए एक सामान्य शब्द प्रतीत होता है और अन्य अनुप्रयोगों जैसे एफ़टीपी के संदर्भ में चर्चा की जाती है।

process.env.UV_THREADPOOL_SIZE = 20; 

हालांकि, मेरी समझ भी इस अनुपस्थित, अधिक से अधिक फ़ाइल स्थानांतरण एक के लिए इंतजार करना पड़ सकता है जो:

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

मुझे एक आंत महसूस हो रहा है कि इसका नोड सीधे करने के लिए कुछ भी नहीं है।

कृपया इस त्रुटि को संभालने के लिए किसी भी अन्य संभावनाओं (नोड या अन्यथा) को इंगित करें। इसके अलावा, कोई अन्य अप्रत्यक्ष समाधान? कुछ बार पुनः प्रयास करना एक हो सकता है लेकिन यह बेकार होगा। संपादित करें: नहीं, मैं पुनः प्रयास नहीं कर सकता। हेडर पहले ही त्रुटि के साथ भेजे गए हैं!

एक पक्ष नोट: Sendfile के उपयोग पर कई उदाहरण जिससे धारणा है कि यह एक तुल्यकालिक कॉल है दे रही है कॉलबैक का उपयोग कर छोड़ सकते हैं। यह नहीं। कॉलबैक का हर समय उपयोग करें, सफलता की जांच करें और केवल तभी "अगले" मिडलवेयर पर जाएं या अगर किसी भी कारण से प्रेषण विफल हो जाए तो उचित कदम उठाएं। ऐसा नहीं करने से एसिंक्रोनस वातावरण में परिणामों को डीबग करना मुश्किल हो सकता है।

+0

'res.sendFile' का उपयोग करते समय मैंने' res.statusCode' '200' होने पर भी कुछ 'ECONNABORTED' देखा है। मुझे वर्तमान में इसका समाधान नहीं मिला है। – paperclip

उत्तर

2

देखें https://stackoverflow.com/a/36949631/2798152 यह संभव हो सकता है कि कुछ मामलों में आप res.sendFile छोर तक अतुल्यकालिक कॉल करने से पहले res.end फोन करके कनेक्शन समाप्त?

यदि ऐसा नहीं है - क्या आप अपने अधिक आवेदन कोड पेस्टबिन कर सकते हैं?

+1

यह मेरे लिए काम किया है। 'res.end' को' res.download' से पहले बुलाया गया था। +1 – Avraham

0

मोंगो डीबी की स्थापना और पुन: स्थापित करने से यह मेरे लिए हल हो गया।

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