在我的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 (基于拉的流)方式使用传入的响应蒸汽,而不是流1(基于推送)类型。
发布于 2016-08-31 11:09:48
问题是,流处于流模式,所以所有数据都是自动读取的。也许你可以试试这个:
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);
}
});
});https://stackoverflow.com/questions/39247508
复制相似问题