流媒体数据事件尚未注册

时间:2015-08-07 06:58:02

标签: node.js supertest superagent

我使用superagent接收来自服务器的通知流

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

由于某些原因datareadable事件尚未注册,我可以将数据传输到信息中心。我如何动态处理数据?

2 个答案:

答案 0 :(得分: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)
  })

但如果有的话,这将无法处理重定向。

答案 1 :(得分: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是否在通过管道发送数据之前首先下载整个响应)