【发布时间】:2016-04-27 10:29:41
【问题描述】:
我想创建一个 koa 路由,它充当另一个 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.。
【问题讨论】:
-
您在正确的轨道上,但您只需将
this.body设置为可读流。您的答案(使用request模块)有效,因为req(url)返回一个可读流。一般来说,当你想直接在 Koa/co 中使用流时,你不会使用yield。 -
@danneu 这很有道理。