首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >nodejs请求-流一个响应文件

nodejs请求-流一个响应文件
EN

Stack Overflow用户
提问于 2016-08-31 10:46:27
回答 1查看 2K关注 0票数 0

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

我想做的是:-让请求文件资源(使用节点请求模块)-当响应开始可用,然后开始读取数据块,而不是让文件下载到磁盘。

我理解请求模块确实支持流,并且我已经验证了以下代码的工作原理:

代码语言:javascript
复制
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。

代码语言:javascript
复制
rvnath@admin ~/downloader $ node download.js
now readable

简单地说,编辑,我希望能够以streams2 (基于拉的流)方式使用传入的响应蒸汽,而不是流1(基于推送)类型。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-31 11:09:48

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

代码语言:javascript
复制
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);
    }
  });
});
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39247508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档