2015-08-07 4 views
2

Я использую superagent, чтобы получать уведомления потока от сервераStreaming событие данных не зарегистрированы

require('superagent') 
    .post('www.streaming.example.com') 
    .type('application/json') 
    .send({ foo: 'bar' }) 
    .on('data', function(chunk) { 
    console.log('chunk:' + chunk); // nothing shows up 
    }) 
    .on('readable', function() { 
    console.log('new data in!'); // nothing shows up 
    }) 
    .pipe(process.stdout);   // data is on the screen 

По какой-то причине data и readable события не регистрируется, я могу данные трубы hovewer к sceeen , Как я могу обрабатывать данные «на лету»?

ответ

2

Глядя на источник pipe метода, вы можете получить доступ к исходному req объекта и добавить слушателей на нем:

require('superagent') 
    .post('www.streaming.example.com') 
    .type('application/json') 
    .send({ foo: 'bar' }) 
    .end().req.on('response',function(res){ 
     res.on('data',function(chunk){ 
      console.log(chunk) 
     }) 
     res.pipe(process.stdout) 
    }) 

Но это не будет обрабатывать перенаправление, если оно есть.

+0

Отлично. Работает с 'супертестом' тоже. – sakovias

1

Похоже, superagent не возвращает реальный поток, но вы можете использовать что-то вроде through для обработки данных:

var through = require('through'); 

require('superagent') 
    .post('www.streaming.example.com') 
    .type('application/json') 
    .send({ foo: 'bar' }) 
    .pipe(through(function onData(chunk) { 
    console.log('chunk:' + chunk); 
    }, function onEnd() { 
    console.log('response ended'); 
    })); 

(хотя вы должны проверить, если superagent не будет первым загрузить все ответ перед отправкой данных через трубу)

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