webdevqa.jp.net

stdoutと書き込み可能なストリームへのパイプ

二重文字列( through による)を介してファイルをパイプ処理していて、stdoutおよびファイルへの書き込み。どちらかがうまく機能します。

var fs = require('fs');
var path = require('path');
var through = require('through'); // easy duplexing, i'm young


catify = new through(function(data){
    this.queue(data.toString().replace(/(woof)/gi, 'meow'));
});

var reader = fs.createReadStream('dogDiary.txt'); // woof woof etc.
var writer = fs.createWriteStream(path.normalize('generated/catDiary.txt')); // meow meow etc.

// yay!
reader.pipe(catify).pipe(writer)

// blank file. T_T
reader.pipe(catify).pipe(process.stdout).pipe(writer) 

これは、process.stdoutが書き込み可能なストリームであるためだと思いますが、どうすればよいかわかりません({end: false}を渡してみましたが、うまくいきませんでした)。

それでもストリームに頭を抱えるのに苦労しているので、明らかな何かを見逃した場合は許してください:)

18
Nick Tomlin

あなたが望むのは:

reader.pipe(catify)
catify.pipe(writer)
catify.pipe(process.stdout)

パイプはソースではなく宛先を返すため、これらを分離する必要がありました。

28
Jonathan Ong