2015-07-03 9 views
7

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

reply(request.get('https://google.com')); 

एक त्रुटि फेंकता है। डॉक्स में यह कहते धारा वस्तु streams2 साथ संगत होना चाहिए, तो फिर मैं करने की कोशिश की:

reply(streams2(request.get('https://google.com'))); 

अब जब कि एक सर्वर साइड त्रुटि फेंक नहीं है, लेकिन ब्राउज़र में अनुरोध कभी नहीं भार (क्रोम का उपयोग)।

मैं तो इस की कोशिश की:

var stream = request.get('https://google.com'); 
stream.on('data', data => console.log(data)); 
reply(streams2(stream)); 

और सांत्वना डेटा outputted था में है, इसलिए मुझे पता है कि धारा मुद्दा, बल्कि Hapi नहीं है। मैं काम करने के लिए हैपी में स्ट्रीमिंग कैसे प्राप्त कर सकता हूं?

उत्तर

12

Readable.wrap उपयोग करके देखें:

var Readable = require('stream').Readable; 
... 
function (request, reply) { 

    var s = Request('http://www.google.com'); 
    reply(new Readable().wrap(s)); 
} 

नोड 0.10.x और HAPI 8.x.x. का उपयोग कर परीक्षण किया गया मेरे कोड उदाहरण में Request नोड-अनुरोध मॉड्यूल है और request आने वाली हैपी अनुरोध ऑब्जेक्ट है।

अद्यतन

एक अन्य संभावित समाधान http.IncomingMessage जो एक उचित पढ़ने धारा है साथ Request से 'response' event और फिर reply के लिए सुनने के लिए किया जाएगा।

function (request, reply) { 

    Request('http://www.google.com') 
    .on('response', function (response) { 
     reply(response); 
    }); 
} 

इसके लिए कम चरणों की आवश्यकता है और डेवलपर को ट्रांसमिशन से पहले स्ट्रीम में उपयोगकर्ता परिभाषित गुणों को संलग्न करने की अनुमति भी देता है। यह 200 से अधिक स्टेटस कोड सेट करने में उपयोगी हो सकता है।

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