2015-07-03 23 views
7

Veriyi tarayıcıya Hapi ile göndermek için kullanıyorum ama nasıl yapacağımızı anlayamıyorum. Özellikle request modülünü kullanıyorum. Dokümanlar göre reply amacı, bir akışı kabul yüzden çalıştık:Verileri, Hapi ile tarayıcılara nasıl aktarabilirim?

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

hata verir.

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

Şimdi bu bir sunucu tarafı hata atmak değil, ama tarayıcıda isteği asla yükler (krom kullanarak): docs yılında akışı nesnesi streams2 ile uyumlu olmalıdır diyor, o halde ben denedim.

Sonra bu çalıştı:

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

Ve outputted edildi konsol verilerinde, bu yüzden akışı oldukça sorunu değildir ancak Hapi olmadığını biliyorum. Hapi'de çalışmak için nasıl akış yapabilirim?

cevap

12

Readable.wrap kullanmayı deneyin: Düğüm 0.10.x ve hapi 8.x.x. kullanılarak test edilmiştir

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

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

Kod örneğimde, Request düğüm isteği modülüdür ve request gelen hapi istek nesnesidir.

GÜNCELLEME

Başka bir olası çözüm düzgün bir okuma akışıdır http.IncomingMessage ile Request den 'response' event ve sonra reply dinlemek için olurdu.

function (request, reply) { 

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

Bu, daha az adım gerektirir ve geliştiricinin aktarımdan önce akışa kullanıcı tanımlı özellikleri eklemesine izin verir. Bu, 200'den başka durum kodlarının ayarlanmasında yararlı olabilir.

İlgili konular