我在Windows 7上安装了node.js,我使用Transform流的基本示例解压缩目录中的日志文件,并使用_transform函数异步读取日志文件。
这个过程非常快,但现在我遇到了一个问题:
我需要将源文件名映射到过滤后的行。我尝试将文件名附加到on.readable事件中的过滤行,但它不正确,因为数据是从多个文件异步发出的,因此将所有内容映射到单个文件名。我尝试了一些类似下面的代码,但这会引发错误,说明创建了太多的事件监听器。
source.pipe(gunzip).pipe(liner).pipe(new Upper(filename).pipe(process.stdout));
答案 0 :(得分:0)
发现解决方案基本上需要为每一行创建单独的管道,即兴代码如下:
var gunzip = [];
var source = [];
var upper = [];
var outputfile = [];
var liner = [];
.
.
.
function file(i) {
var filename = files[i];
gunzip[i] = zlib.createGunzip();
source[i] = fs.createReadStream(__dirname + '/' + filename);
upper[i] = new Upper();
liner[i] = new LineSplitter();
outputfile[i] = fs.createWriteStream(__dirname + '/' + '_' + i + '_outputfile.txt');
source[i].pipe(gunzip[i]).pipe(liner[i]).pipe(upper[i]).pipe(outputfile[i]);
}
作为进一步的步骤,希望使用异步模块并行运行这些管道。