web-dev-qa-db-fra.com

Tuyau vers flux standard et inscriptible

Je redirige un fichier via une chaîne duplex (gracieuseté de through ) et j'ai du mal à imprimer des informations sur stdout et écrit dans le fichier. L'un ou l'autre fonctionne très bien.

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) 

Je suppose que c'est parce que process.stdout est un flux inscriptible, mais je ne sais pas comment faire ce que je veux (j'ai essayé de passer {end: false} en vain).

J'ai encore du mal à envelopper ma tête autour des ruisseaux, alors pardonnez-moi si j'ai raté quelque chose d'évident:)

18
Nick Tomlin

Je pense que ce que vous voulez c'est:

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

Celles-ci devaient être séparées car les tuyaux renvoient leurs destinations et non leur source.

28
Jonathan Ong