2015-07-03 34 views
7

Próbuję użyć strumieni do wysyłania danych do przeglądarki za pomocą Hapi, ale nie potrafię określić, w jaki sposób. W szczególności używam modułu request. Zgodnie z docs przedmiotem reply akceptuje strumień tak próbowałem:Jak przesyłać dane do przeglądarek za pomocą Hapi?

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

rzuca błąd. W docs mówi przedmiotem strumień musi być zgodna z streams2, więc potem próbowałem:

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

Teraz, nie rzucać się błąd po stronie serwera, ale w przeglądarce nigdy żądanie obciążenia (przy użyciu Chrome).

Następnie próbowałem to:

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

A w danych konsoli został wychodzących, więc wiem, że strumień nie jest problemem, ale raczej Hapi. Jak mogę uzyskać streaming w Hapi do pracy?

Odpowiedz

12

Spróbuj użyć Readable.wrap:

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

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

badano stosując 0.10.x węzeł i Hapi 8.x.x. W moim przykładzie kodu Request jest modułem żądania węzła i request jest przychodzącym obiektem zapytania hapi.

UPDATE

Innym możliwym rozwiązaniem byłoby słuchać za 'response' event od Request a następnie reply z http.IncomingMessage który jest właściwy strumień odczytu.

function (request, reply) { 

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

Wymaga to wykonania mniejszej liczby czynności, a także umożliwia programistom dołączanie właściwości zdefiniowanych przez użytkownika do strumienia przed transmisją. Może to być przydatne przy ustawianiu kodów stanu innych niż 200.