2015-07-03 80 views
7

我試圖使用流向Hapi發送數據到瀏覽器的數據,但無法確定我們的方式。具體來說,我使用的是request模塊。根據文檔reply對象接受流,所以我試過:如何使用Hapi將數據流式傳輸到瀏覽器?

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

引發錯誤。在文檔它說的流對象必須與streams2兼容,所以後來我想:

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

現在,這並不拋出一個服務器方的錯誤,但在瀏覽器的請求從不負載(使用Chrome)。

然後我嘗試這樣做:

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

並在控制檯數據輸出,所以我知道流不是問題,而是哈皮。我如何才能在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是傳入的hapi請求對象。

UPDATE

另一種可能的解決辦法是監聽'response' eventRequest然後replyhttp.IncomingMessage這是一個適當的讀操作流。

function (request, reply) { 

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

這需要較少的步驟,並且還允許開發者傳輸之前用戶定義的屬性附加到流。這可以用於設置除200以外的狀態代碼。

相關問題