2011-03-13 8 views
16

मैं Node.js के साथ कुछ अजीब हो रही हैं Node.js:process.nextTick त्रुटि

जब मैं कोशिश करते हैं और केवल निम्न कोड के साथ एक http ग्राहक का उपयोग करें:

require('http').get({host:'127.0.0.1',port:9000, path:'/'}, function(res){ 
    var data = ''; 
    res.setEncoding('utf8'); 
    res.on('data', function(chunk){ 
     data += chunk; 
    }); 
    res.on('end', function(){ 
     console.log(data); 
    }); 
}); 

कोई त्रुटि फेंक दिया जाता है :

node.js:116 
     throw e; // process.nextTick error, or 'error' event on first tick 
     ^TypeError: Cannot call method 'emit' of undefined 
    at Socket.<anonymous> (http.js:1174:9) 
    at Socket.emit (events.js:42:17) 
    at Array.<anonymous> (net.js:799:27) 
    at EventEmitter._tickCallback (node.js:108:26) 

जब मैं अपने ब्राउज़र में 127.0.0.1:9000 ब्राउज़ करता हूं तो मुझे वांछित वेबपृष्ठ मिलता है। इसके अलावा, वेब होस्ट लॉग में मैं देख सकता हूं कि एक सफल कनेक्शन रहा है (ऐसा कुछ नहीं होता है जो के बजाय localhost का उपयोग करता है। बस एक तरफ)।

मैं कहता हूं कि यह मजाकिया है क्योंकि अगर मैं मेजबान को Google में बदलता हूं या जो कुछ भी ठीक काम नहीं करता है और यह कंसोल पर HTML को थकाता है।

मुझे ध्यान रखना चाहिए, मैं स्रोत से निर्मित साइगविन के तहत नोड 0.4.2 चला रहा हूं।

कोई भी इससे पहले देखा/निपटाया?

+0

मैं आज ही समस्या का सामना करना पड़ा अपडेट करके हल अद्यतन कर सकते हैं आर्क लिनक्स पर) जब एक cnbc.com url की सामग्री प्राप्त करने का प्रयास करते हैं, दुर्भाग्यवश मुझे यह नहीं पता कि इसे कैसे ठीक किया जाए (अभी तक) ... – dhofstet

+0

@dofstet, क्या यह आपके साथ संगत है? क्या आप एक पुन: उत्पन्न करने योग्य मामले को परिभाषित कर सकते हैं? क्या आपने उन मामलों में कुछ भी अलग किया है जहां यह सामान्य मामलों से विफल रहता है? यह बहुत निराशाजनक है – davin

+0

मैंने इसके लिए टिकट खोला: https://github.com/joyent/node/issues/784 – dhofstet

उत्तर

8

मैं बहुत यकीन है कि मैं समझ गए होंगे कि क्या इस त्रुटि का कारण बनता है कर रहा हूँ:

When there is no Content-Length HTTP header.

परिस्थितियों रहे हैं जब इस हेडर नजरअंदाज कर दिया है, विशेष रूप से जब Transfer-Encoding: chunked सेट कर दिया जाता है, और फिर नोड अच्छा खेलता है। हालांकि मूल रूप से नोड के साथ हो जाता है, स्थानांतरण एन्कोडिंग को अक्सर बंद करने के लिए सेट नहीं किया जाएगा क्योंकि होस्टिंग सर्वर सामान स्ट्रीम नहीं कर रहा है, लेकिन वे अक्सर Content-Length शीर्षलेख सेट नहीं करते हैं (चाहे यह मानक अनुपालन संदिग्ध है, the standard says जब तक कि अन्य शीर्षकों द्वारा निषिद्ध न किया जाए, इस हेडर को सेट किया जाना चाहिए, हालांकि ये असली दुनिया के मामले हैं जिन्हें किसी भी मामले में निपटाया जाना चाहिए)।

मैंने इसे अपने स्थानीयहोस्ट के साथ चेक किया, और जब मैंने Content-Length सेट किया, तो नोड अचानक अच्छा खेलता है।

टिप्पणी में उल्लेख किया है (और अंक में), वह एक यूआरएल है कि भी टूट जाता है नोड नहीं मिला @dhofstet के रूप में: www.cnbc.com/id/41863659/
जब वह इस पोस्ट, मैं जाँच की, और यह किया वास्तव में http.get() तोड़ें। मैंने अभी पुनः जांच की है, और यूआरएल लिखने के समय अब ​​Content-Length शीर्षलेख जारी करता है, और चमत्कारों का चमत्कार, उस यूआरएल पर नोड अब क्रैश नहीं होता है।

अच्छा होगा अगर कोई इसकी पुष्टि कर सके (स्थानीयहोस्ट सर्वर को सेट करने में बहुत लंबा समय नहीं लेना चाहिए यदि आपके पास पहले से कोई नहीं है, और कस्टम हेडर के साथ मूल प्रतिक्रिया तैयार करें)।

+1

इस तरह के सवाल इस सवाल का जवाब देते हैं। यदि नहीं, तो [माइकल की अनुरोध लाइब्रेरी] का उपयोग करने का प्रयास करें (https: // github।कॉम/माइकल/अनुरोध), क्योंकि यह आपके द्वारा बनाई जा रही किसी भी गलतियों को कम करेगा (या एक बग फाइल करें)। साथ ही, [# node.js] में रोकें (http://webchat.freenode.net/?channels=node.js&uio=d4) और त्वरित प्रतिक्रिया के लिए प्रश्न पूछें :) अपने निष्कर्षों के साथ रिपोर्ट करना सुनिश्चित करें। – DTrejo

+0

मुझे नोड v0.3.7 में एक ही समस्या का सामना करना पड़ रहा था, लेकिन जब मैं अपग्रेड किया गया तो समस्या दूर हो गई – Jayesh

1

आप नोड

$ sudo n स्थिर

का उपयोग कर रहा आम के साथ इस समस्या है और (नोड 0.4.2 के साथ नोड

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