Node.js nodejs请求-流式传输响应文件

Node.js nodejs请求-流式传输响应文件,node.js,node-request,Node.js,Node Request,在我的nodejs应用程序中,我试图读取一个http文件url,然后以流式方式下载该文件的内容 我想做的是: -向文件资源发出请求(使用节点请求模块) -当响应开始变为可用时,开始以块的形式读取数据,而不是将文件下载到磁盘 我了解请求模块确实支持流式传输,并且我已验证以下代码是否有效: var request = require('request'); var fileUrl = "http://172.19.2.48:8080/files/1472628282006/valid.txt";

在我的nodejs应用程序中,我试图读取一个http文件url,然后以流式方式下载该文件的内容

我想做的是: -向文件资源发出请求(使用节点请求模块) -当响应开始变为可用时,开始以块的形式读取数据,而不是将文件下载到磁盘

我了解请求模块确实支持流式传输,并且我已验证以下代码是否有效:

var request = require('request');

var fileUrl = "http://172.19.2.48:8080/files/1472628282006/valid.txt";

request(fileUrl, function(err, response, body) {})
.on('response', function(response) {

  /*
  response.on('readable', function() {
    console.log("now readable");
    var ch;
    while ((ch=response.read(1))!== null) {
      console.log("char:", ch);
    }
  });
  */

  response.on('data', function(data) {
    console.log('data: ', data.toString());
  });

});
但唯一的问题是,我无法控制“读取多少我想读取的内容”,因为“数据”事件提供了当时可用的任何信息。相反,我想做的是自己使用读取操作,就像上面代码片段中的注释的代码一样

这样的代码通常适用于nodeJS steams 2,但我无法在这里使用它。已触发可读事件,但读取操作返回null。我的用例是,我将读取某种结构化数据,我将通过使用有限状态机一次读取一个字符来解析它

那么,是否有任何数据可以读取,而不是被“数据”事件通知

尝试读取时的输出。仅接收可读事件,后续读取返回null

rvnath@admin ~/downloader $ node download.js
now readable
编辑
简而言之,我希望能够以streams2(基于拉的流)的方式使用传入的响应流,而不是streams 1(基于推的)类型。

问题是,流处于流动模式,因此所有数据都会自动读取。也许你可以试试这个:

request(fileUrl, function(err, response, body) {})
.on('response', function(response) {
  response.pause(); // <-- Pauses stream so you can pull data on demand
  response.on('readable', function() {
    console.log("now readable");
    var ch;
    while ((ch=response.read(1))!== null) {
      console.log("char:", ch);
    }
  });
});
request(fileUrl,函数(err,response,body){}
.on('response',函数(response){

response.pause();//问题是,流处于流动模式,因此所有数据都会自动读取。也许您可以尝试以下方法:

request(fileUrl, function(err, response, body) {})
.on('response', function(response) {
  response.pause(); // <-- Pauses stream so you can pull data on demand
  response.on('readable', function() {
    console.log("now readable");
    var ch;
    while ((ch=response.read(1))!== null) {
      console.log("char:", ch);
    }
  });
});
request(fileUrl,函数(err,response,body){}
.on('response',函数(response){
response.pause()//