如何在node.js中管道起作用?

dan*_*y74 7 node.js

我想从文件到流读取,将输出传递给一个函数,该函数将upperCase内容然后写入文件.这是我的尝试.我究竟做错了什么?

const fs = require('fs')

const fred = q => {
    return q.toUpperCase()
}

fs.createReadStream('input.txt')
    .pipe(fred)
    .pipe(fs.createWriteStream('output.txt'))
Run Code Online (Sandbox Code Playgroud)

目前的错误是:

dest.on不是一个函数

dan*_*y74 11

根据 Marco 的回答但整理了一下:

const fs = require('fs')
const {Transform} = require('stream')

const upperCaseTransform = new Transform({
    transform: (chunk, encoding, done) => {
        const result = chunk.toString().toUpperCase()
        done(null, result)
    }
})

fs.createReadStream('input.txt')
    .pipe(upperCaseTransform)
    .pipe(fs.createWriteStream('output.txt'))
Run Code Online (Sandbox Code Playgroud)


Mar*_*nto 5

如果要“转换”流,则必须使用“转换”。我建议您阅读: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'))
Run Code Online (Sandbox Code Playgroud)

编辑:您需要在块中调用.toString(),因为它是一个缓冲区!:)