javascript - 如何在 NodeJS 中创建一对多转换流?

标签 javascript node.js node-streams

我正在尝试使用 NodeJS 流替换 ETL 过程。我尝试编写的转换流采用数据集,并根据配置数据,为每个输入的记录输出一条或多条记录。换句话说,如果读取 100000 条记录,则转换最终可能会写入 100000 到 400000 条记录。 _transform 方法只允许调用其回调一次,因此我试图弄清楚如何为每个输入对象输出多个对象。

我查看了双工,但我看到的每个示例都将其用作双向流,而我绝对希望我的流是单向流(或者我可能只是不明白它们是如何工作的)。有人对如何实现这个有任何建议吗?

最佳答案

回调只能调用一次,但 .push 方法会发出数据,并且可以在 _transform 方法中根据需要调用多次。示例:

class MyTransform extends Transform {
  _transform(chunk, enc, next) {
    const arrayFromChunk = chunk.split(',');

    arrayFromChunk.forEach(piece => {
      // this.push is what will emit readable data, can be called as often
      // as needed.
      this.push(piece); 
    });

    next(); // next can only be called once.
  }
}

此处的文档:https://nodejs.org/docs/latest-v18.x/api/stream.html#stream_implementing_a_transform_stream

关于javascript - 如何在 NodeJS 中创建一对多转换流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73377914/

相关文章:

javascript - Backbone 和 Express 路由器可以在 Express 应用程序中协同工作吗?

javascript - Node 双工流在读取时实际上并不发出数据

javascript - 同源策略不允许读取远程资源

javascript - 如何使灯箱滚动灯箱而不是页面

javascript - 每个使用 ionic v1 和 angularjs 的页面中都有奇怪的点

javascript - Nodejs - 如何压缩多个图像

node.js - 在 Hapi.js 中提供静态文件时,我们如何确保发送正确的 MIME 类型?

node.js - Gulp Stream 完成并带有 promise

node.js - 如何在可读的http流上运行Sharp转换并写入文件

javascript - 在 React 和 Express js 中使用 Stripe Checkout