.. | ||
.travis.yml | ||
example.js | ||
index.js | ||
LICENSE | ||
package.json | ||
README.md | ||
test.js |
duplexify
Turn a writeable and readable stream into a single streams2 duplex stream.
Similar to duplexer2 except it
supports both streams2 and streams1 as input and it allows you to set
the readable and writable part asynchronously using
setReadable(stream)
and
setWritable(stream)
npm install duplexify
Usage
Use duplexify(writable, readable, streamOptions)
(or
duplexify.obj(writable, readable)
to create an object
stream)
var duplexify = require('duplexify')
// turn writableStream and readableStream into a single duplex stream
var dup = duplexify(writableStream, readableStream)
.write('hello world') // will write to writableStream
dup.on('data', function(data) {
dup// will read from readableStream
})
You can also set the readable and writable parts asynchronously
var dup = duplexify()
.write('hello world') // write will buffer until the writable
dup// part has been set
// wait a bit ...
.setReadable(readableStream)
dup
// maybe wait some more?
.setWritable(writableStream) dup
If you call setReadable
or setWritable
multiple times it will unregister the previous readable/writable stream.
To disable the readable or writable part call setReadable
or setWritable
with null
.
If the readable or writable streams emits an error or close it will
destroy both streams and bubble up the event. You can also explicitly
destroy the streams by calling dup.destroy()
. The
destroy
method optionally takes an error object as
argument, in which case the error is emitted as part of the
error
event.
.on('error', function(err) {
dupconsole.log('readable or writable emitted an error - close will follow')
})
.on('close', function() {
dupconsole.log('the duplex stream is destroyed')
})
.destroy() // calls destroy on the readable and writable part (if present) dup
HTTP request example
Turn a node core http request into a duplex stream is as easy as
var duplexify = require('duplexify')
var http = require('http')
var request = function(opts) {
var req = http.request(opts)
var dup = duplexify(req)
.on('response', function(res) {
req.setReadable(res)
dup
})return dup
}
var req = request({
method: 'GET',
host: 'www.google.com',
port: 80
})
.end()
req.pipe(process.stdout) req
License
MIT
Related
duplexify
is part of the mississippi stream
utility collection which includes more useful stream modules similar
to this one.