Ответ 1
Я думаю, что вы хотите:
reader.pipe(catify)
catify.pipe(writer)
catify.pipe(process.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}
безрезультатно).
Все еще изо всех сил пытаюсь обернуть голову вокруг потоков, так что простите меня, если я пропустил что-то очевидное:)
Я думаю, что вы хотите:
reader.pipe(catify)
catify.pipe(writer)
catify.pipe(process.stdout)
Их нужно было разделить, потому что каналы возвращают свои адресаты, а не их источник.