【发布时间】:2015-07-26 15:27:06
【问题描述】:
我需要在 Node js 服务器上解析一个文本文件。文本文件由标题和项目列表组成,全部位于单独的行中。我做了一个请求,然后将响应通过管道传输到解析器流。我需要从标题中提取时间。问题是有时标头变量会从文件中间附加一些信息。如果我 console.log 它看起来像这样:
HEADER
MIDDLE_OF_THE_FILE_STUFF
最奇怪的是它并非一直都在发生。只有某些时候。并且文件中间的东西每次都从文件中的同一位置附加。我尝试做header.substring(0,len),但它只剪切标题本身,没有 MIDDLE_OF_THE_FILE_STUFF。
代码如下:
parser._transform = function(chunk,encoding,done){
var time = {};
var data = chunk.toString();
lines = data.split('\n');
header = (lines[0]);
var regEx = /[0-9][0-9]:[0-9][0-9]/;
var m = regEx.exec(header);
var splitTime = m[0].split(':');
time = {
hours:splitTime[0],
minutes:splitTime[1]
}
console.log(time);
var pushjson = JSON.stringify(time, null, 2);
this.push(pushjson);
done();
}
request
.get('url')
.on('error', function(err){
console.log(err)
})
.pipe(parser)
.pipe(fs.createWriteStream('result.json'))
我已经为此苦苦挣扎了很长一段时间,但我在任何地方都找不到具有相同错误的帖子。我想我可能不明白 transofrm 流是如何完全工作的。所以,请帮忙。
【问题讨论】:
-
您可以发布您正在使用的输入文件,以便我可以从我的计算机上运行它吗?
-
@DanielJacobson maps.weather.gov.hk/r4/input_files/latestReadings_AWS1
-
你的
_transform函数可以被调用任意次数,根据输入的大小使用更多的块。第一次调用后似乎没有任何东西可以停止发出输出。 -
你在使用请求模块吗?
标签: javascript node.js parsing stream