2015-07-03 6 views
7

Sto provando a utilizzare gli stream per inviare dati al browser con Hapi, ma non riesco a capire come. Nello specifico sto usando il modulo request. Secondo la documentazione dell'oggetto reply accetta un flusso così ho provato:Come faccio a trasmettere dati ai browser con Hapi?

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

Il genera un errore. Nei documenti si legge l'oggetto stream deve essere compatibile con streams2, così poi ho provato:

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

Ora che non lanciare un errore lato server, ma nel browser la richiesta mai carichi (utilizzando Chrome).

Allora ho provato questo:

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

E nei dati della console stato emesso, quindi so il flusso non è il problema, ma piuttosto Hapi. Come posso far funzionare lo streaming in Hapi?

risposta

12

Provare a utilizzare Readable.wrap:

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

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

testata utilizzando Nodo 0.10.x e Hapi 8.x.x. Nel mio esempio di codice Request è il modulo di richiesta del nodo e request è l'oggetto di richiesta hapi in arrivo.

UPDATE

Un'altra possibile soluzione potrebbe essere quella di ascoltare il 'response' event da Request e poi reply con la http.IncomingMessage che è un flusso di lettura corretta.

function (request, reply) { 

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

Ciò richiede meno passaggi e consente inoltre allo sviluppatore di collegare le proprietà definite dall'utente allo stream prima della trasmissione. Questo può essere utile per impostare codici di stato diversi da 200.