duplexify

In notebook:
FrontEndMasters Networking and Streams
Created at:
2017-09-30
Updated:
2017-10-01
Tags:
backend Node JS JavaScript

duplexify

Define a stream where you may have to do some setup before you get a handle. E.g. first make a directory, then write to file.

An advantage is that you don't have to deal with callbacks (called when the initial setup is finished), but you can buffer right away.

var duplexify = require('duplexify')
var d = duplexify()

d.setReadable(...)
d.setWritable(...)
  //	****		dup.js		****

const duplexify = require('duplexify')

// we're creating a logger
// stream stuff into a log
var mkdirp = require('mkdirp') // only creates the dir if it doesn't exist
var fs = require('fs')

module.exports = function (name) {
  var d = duplexify()
  
  mkdirp('logs', function (err) { // so here we don't have to worry wether /logs exists
  // don't have to queue or buffer, just use it
    var w = fs.createWriteStream('logs/' + name + '.log')
    // we set it in the duplexify stream ↴
    // duplexify we also forward the error events
    d.setWritable(w)
  })
  return d
}

$ npm i -S mkdirp

  //	****		run.js		****

var log = require('./api.js')

var stream = log()
var n = 0
var iv = setInterval(function () {
  stream.write(Date.now() + '\n')
  if (n++ === 5) {
    clearInterval(iv)
    stream.end()
  }
}, 100)

$ node run.js ☛ does create the /log directory.