cheatsheets/nodejs-stream.md

1.4 KiB

title category
Stream Node.js
const Readable = require('stream').Readable
const Writable = require('stream').Writable
const Transform = require('stream').Transform

Piping

clock()                 // Readable stream
  .pipe(xformer())      // Transform stream
  .pipe(renderer())     // Writable stream

Readable streams

Readable streams are generators of data. Write data using stream.push().

function clock () {
  const stream = new Readable({
    objectMode: true,
    read: () => {} // implement this if you need on-demand reading
  })

  setInterval(() => {
    stream.push({ time: new Date() })

    if (error) return stream.emit('error', error)
    if (eof) return stream.push(null)
  }, 1000)

  return stream
}

Transform streams

Pass the updated chunk to done(null, chunk).

function xformer () {
  let count = 0

  return new Transform({
    objectMode: true,
    transform: (data, _, done) => {
      done(null, { time: data.time, index: count++ })
    }
  })
}

Writable streams

function renderer () {
  return new Writable({
    objectMode: true,
    write: (data, _, done) => {
      console.log('<-', data)
      done()
    }
  })
}

Reading

const st = source()
st.on('data', (data) => { console.log('<-', data) })
st.on('close', () => { console.log('** bye') })

Also see