2016-01-21 3 views
3

Я хочу создать маршрут koa, который действует как прокси-сервер для другого URL-адреса, который доставляет файл, который обычно составляет несколько десятков мегабайт.koa.js потоковый ответ от удаленного url

Поэтому я бы не хотел блокировать при ответе. В настоящее время я использую this.body = yield request.get(url);, где запрос - это [co-request] 1.

Как передать ответ клиенту?

Edit:

Я сейчас делаю следующее:

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 для объяснения.

Смежные вопросы