如何在自定义的through2流中内部链接流

时间:2014-11-11 03:14:34

标签: node.js stream

我在Node中编写自己的流,它接收文本流并输出每行文本的对象。这就是最终结果应该是这样的:

fs.createReadStream('foobar')
  .pipe(myCustomPlugin());

该实现将使用through2event-stream来简化操作:

var es = require('event-stream');
var through = require('through2');
module.exports = function myCustomPlugin() {
  var parse = through.obj(function(chunk, enc, callback) {
    this.push({description: chunk});
    callback();
  });
  return es.split().pipe(parse);
};

但是,如果我把这个分开,基本上我做的是:

fs.createReadStream('foobar')
  .pipe(
    es.split()
      .pipe(parse)
  );

哪个不对。有没有更好的办法?我可以继承es.split()而不是在实现中使用它吗?有没有一种简单的方法可以在没有事件流或类似的线路上实现拆分?不同的模式会更好吗?

注意:我故意在函数内部进行链接,因为myCustomPlugin()是我试图公开的API接口。

2 个答案:

答案 0 :(得分:1)

基于之前接受的答案中的链接,将我放在正确的谷歌搜索轨道上,如果你不介意另一个模块,这里有一个较短的版本:stream-combinerread the code来说服自己什么是继续!)

var combiner = require('stream-combiner')
  , through = require('through2')
  , split = require('split2')

function MyCustomPlugin() {
  var parse = through(...)

  return combine( split(), parse )
}

答案 1 :(得分:0)

我正在做类似的事情。 请参阅此解决方案:Creating a Node.js stream from two piped streams

var outstream = through2().on('pipe', function(source) {
    source.unpipe(this);
    this.transformStream = source.pipe(stream1).pipe(stream2);
});
outstream.pipe = function(destination, options) {
    return this.transformStream.pipe(destination, options);
};
return outstream;