我想从文件到流的读取,将输出传递给一个函数,该函数将对内容进行upperCase然后写入文件。这是我的尝试。我做错了什么?
const fs = require('fs')
const fred = q => {
return q.toUpperCase()
}
fs.createReadStream('input.txt')
.pipe(fred)
.pipe(fs.createWriteStream('output.txt'))
目前错误是:
dest.on不是函数
答案 0 :(得分:4)
如果你想要"转换"你必须使用转换。流。我建议你阅读:https://community.risingstack.com/the-definitive-guide-to-object-streams-in-node-js/
const fs = require('fs')
const Transform = require('stream').Transform;
/// Create the transform stream:
var uppercase = new Transform({
decodeStrings: false
});
uppercase._transform = function(chunk, encoding, done) {
done(null, chunk.toString().toUpperCase());
};
fs.createReadStream('input.txt')
.pipe(uppercase)
.pipe(fs.createWriteStream('output.txt'))
编辑:你需要在块中调用.toString(),因为它是一个缓冲区! :)
答案 1 :(得分:2)
根据Marco的回答但整理了一下:
get
答案 2 :(得分:2)
使用异步迭代是转换流的更干净的新方法:
const fs = require('fs');
(async () => {
const out = fs.createWriteStream('output.txt');
for await (const chunk of fs.createReadStream('input.txt', 'utf8')) {
out.write(chunk.toUpperCase());
}
})();
如您所见,如果您已经在异步函数上下文中工作,则这种方式更简洁易读。