2016-01-21 24 views
3

我想創建一個koa路由,該路由就像另一個url的代理,它提供的文件通常爲幾十兆字節。koa.js來自遠程URL的流式響應

因此,我想在做出迴應時不要阻止。目前我正在使用this.body = yield request.get(url);,其中請求是[co-request] 1模塊。

如何將響應流回客戶端?

編輯:

我現在做了以下內容:

var req = require('request'); 
//... 
this.body = req(url).pipe(fs.createWriteStream(this.params.what)); 

如果我貼在我的瀏覽器url,我得到一個文件就好了。 但是,如果我在我的路線中獲得Error: Cannot pipe. Not readable.

+2

你在正確的軌道上,但你只需要設置'this.body'爲可讀流。你的回答(使用'request'模塊)是可行的,因爲'req(url)'返回一個可讀的流。一般來說,當你想直接在Koa/co中使用流時,你不會使用yield。 – danneu

+0

@danneu有道理。 – nha

回答

2

原來的溶液只是:

var req = require('request'); 
//... 
this.body = req(url); 

這是因爲this.body必須是一個可讀流,其req(url)回報。感謝@danneu的解釋。