duplexify
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.