Node.js转换流 - 在_transform函数中查找源名称

时间:2015-04-17 03:41:37

标签: javascript node.js

我在Windows 7上安装了node.js,我使用Transform流的基本示例解压缩目录中的日志文件,并使用_transform函数异步读取日志文件。

这个过程非常快,但现在我遇到了一个问题:

我需要将源文件名映射到过滤后的行。我尝试将文件名附加到on.readable事件中的过滤行,但它不正确,因为数据是从多个文件异步发出的,因此将所有内容映射到单个文件名。我尝试了一些类似下面的代码,但这会引发错误,说明创建了太多的事件监听器。

source.pipe(gunzip).pipe(liner).pipe(new Upper(filename).pipe(process.stdout));

1 个答案:

答案 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]);
            }

作为进一步的步骤,希望使用异步模块并行运行这些管道。