2013-10-25 7 views
13

Node.js में देशी http.get() का उपयोग करके, मैं एक स्ट्रीम को HTTP प्रतिक्रिया पाइप करने की कोशिश कर रहा हूं जिसे मैं data और end ईवेंट से जोड़ सकता हूं।Node.js HTTP प्रतिक्रिया धारा

मैं वर्तमान में gzip डेटा के लिए इस से निपटने रहा हूँ, का उपयोग करते हुए:

http.get(url, function(res) { 
    if (res.headers['content-encoding'] == 'gzip') { 
    res.pipe(gunzip); 
    gunzip.on('data', dataCallback); 
    gunzip.on('end', endCallback); 
    } 
}); 

gunzip एक धारा है और यह सिर्फ काम करता है। मैंने स्ट्रीम बनाने (स्ट्रीम लिखने, फिर स्ट्रीम पढ़ने) की कोशिश की है और प्रतिक्रिया पाइप की है, लेकिन बहुत भाग्य नहीं रहा है। गैर-gzipped सामग्री के लिए, एक ही सौदे को दोहराने के लिए कोई सुझाव?

+0

मैं प्रतिक्रिया शरीर को प्राप्त करने की कोशिश कर रहा हूं, फिर एक बार यह खत्म हो जाने के बाद। मैंने सोचा कि मैं 'res.on ('डेटा') कर सकता हूं, लेकिन ऐसा लगता है कि कभी ट्रिगर नहीं होता है। – dzm

उत्तर

20

HTTP अनुरोध से प्रतिक्रिया ऑब्जेक्ट पठनीय स्ट्रीम का एक उदाहरण है। इसलिए, आप data ईवेंट के साथ डेटा एकत्र करेंगे, फिर end ईवेंट आग लगने पर इसका उपयोग करें।

var http = require('http'); 
var body = ''; 

http.get(url, function(res) { 
    res.on('data', function(chunk) { 
    body += chunk; 
    }); 
    res.on('end', function() { 
    // all data has been downloaded 
    }); 
}); 

readable.pipe(dest) एक ही बात करते हैं, मूल रूप से होता है, अगर उदाहरण में body ऊपर एक लिखने योग्य धारा थे।

+1

दोह, ठीक है यह http के कारण रीडायरेक्ट का पालन नहीं किया गया है। आपके कोड में मेरे पास है और यह रीडायरेक्ट के अपवाद के साथ ठीक काम करता है। मैंने एनपीएम 'फॉलो-रीडायरेक्ट' की जांच की और इसका परीक्षण किया जाएगा। – dzm

+0

आप लोकप्रिय 'अनुरोध' मॉड्यूल को भी आजमा सकते हैं, जो रीडायरेक्ट – vkurchatkin

+0

@vkurchatkin 'request' का पालन करता है gzipped सामग्री का समर्थन करता है – dzm

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