我在Node中编写自己的流,它接收文本流并输出每行文本的对象。这就是最终结果应该是这样的:
fs.createReadStream('foobar')
.pipe(myCustomPlugin());
该实现将使用through2
和event-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接口。
答案 0 :(得分:1)
基于之前接受的答案中的链接,将我放在正确的谷歌搜索轨道上,如果你不介意另一个模块,这里有一个较短的版本:stream-combiner(read 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;