2013-07-23 15 views
16

sto tubazioni di un file attraverso una stringa su due piani (per gentile concessione di through) e sto avendo problemi con la stampa le informazioni per stdoute scrittura nel file. Uno o l'altro funziona bene.Tubo per stdout e scrivibile flusso

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) 

Sto assumendo questo è perché process.stdout è un flusso scrivibile, ma non sono sicuro di come fare ciò che voglio (ho provato passando {end: false} inutilmente).

ancora lottando per avvolgere la mia testa intorno corsi d'acqua, così mi perdoni se ho perso qualcosa di ovvio:)

risposta

23

Penso che quello che vuoi è:

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

Questi aveva bisogno di essere separati a causa di tubi restituire le loro destinazioni e non la loro fonte.

+0

Grazie, questo funziona come un fascino. Qualche spiegazione sul perché questi devono essere separati in questo modo? I tubi –

+1

restituiscono la destinazione, non la loro origine. e vuoi solo fare pipa in un flusso una volta. –