2013-07-23 8 views
16

Ich bin eine Datei durch eine Duplex-Zeichenfolge (mit freundlicher Genehmigung von through) und ich habe Probleme beim Drucken von Informationen zu stdoutund Schreiben in die Datei. Der eine oder andere funktioniert gut.Pipe zu stdout und beschreibbaren Stream

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) 

Ich gehe davon aus das ist, weil process.stdout ein beschreibbares Strom ist, aber ich bin nicht sicher, wie das zu tun, was ich will (i {end: false} ohne Erfolg versucht haben, vorbei).

Noch kämpfen, meinen Kopf um Streams zu wickeln, so verzeiht mir, wenn ich etwas offensichtlich verpasst haben:)

Antwort

23

Ich denke, was Sie wollen, ist:

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

weil Rohre getrennt werden sie gebraucht Rückgabe ihrer Ziele und nicht ihrer Quelle.

+0

Danke, das funktioniert wie ein Charme. Irgendeine Erklärung, warum diese so getrennt werden müssen? –

+1

Pipes geben ihr Ziel zurück, nicht ihre Quelle. und du willst nur einmal in einen Stream pipen. –