2015-07-03 11 views
7

Ich versuche Streams zu verwenden, um Daten mit Hapi an den Browser zu senden, aber wir können nicht unser wie. Insbesondere verwende ich das request Modul. Nach der Dokumentation nimmt die reply Objekt einen Strom so habe ich versucht:Wie streame ich Daten in Browser mit Hapi?

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

Die einen Fehler wirft. In der Dokumentation sagt, dass es das Objekt Stream mit streams2 kompatibel sein muss, so ist, dann habe ich versucht:

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

Jetzt macht das keine Server-Fehler werfen, aber im Browser nie die Anforderung Lasten (mit Chrom).

Ich versuchte dann die:

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

Und in den Konsolendaten ausgegeben wurde, so dass ich weiß, dass der Strom nicht das Problem, sondern Hapi. Wie kann ich in Hapi streamen, um zu arbeiten?

Antwort

12

Versuchen Readable.wrap mit:

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

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

Getestet Knoten 0.10.x verwenden und hapi 8.x.x. In meinem Codebeispiel Request ist das Knotenanforderungsmodul und request das eingehende Hapi-Anforderungsobjekt.

UPDATE

Ein andere mögliche Lösung für die 'response' event von Request und dann reply mit den http.IncomingMessage, die ein richtigen Lesestrom ist zu hören wäre.

Dies erfordert weniger Schritte und ermöglicht es dem Entwickler, vor der Übertragung benutzerdefinierte Eigenschaften an den Stream anzuhängen. Dies kann bei der Einstellung anderer Statuscodes als 200 hilfreich sein.

Verwandte Themen