To create your own writable stream, you have three possibilities.
Create your own class
For this you'll need:
- To extend the
Writable
class.
- To call the Writable constructor in your own constructor.
- To define a
_write()
method in the prototype of your stream object.
Here's an example:
var stream = require('stream');
var util = require('util');
function EchoStream () { // step 2
stream.Writable.call(this);
};
util.inherits(EchoStream, stream.Writable); // step 1
EchoStream.prototype._write = function (chunk, encoding, done) { // step 3
console.log(chunk.toString());
done();
}
var myStream = new EchoStream(); // instanciate your brand new stream
process.stdin.pipe(myStream);
Extend an empty Writable object
Instead of defining a new object type, you can instanciate an empty Writable
object and implement the _write()
method:
var stream = require('stream');
var echoStream = new stream.Writable();
echoStream._write = function (chunk, encoding, done) {
console.log(chunk.toString());
done();
};
process.stdin.pipe(echoStream);
Use the Simplified Constructor API
If you're using io.js, you can use the simplified constructor API:
var writable = new stream.Writable({
write: function(chunk, encoding, next) {
console.log(chunk.toString());
next();
}
});
Use an ES6 class in Node 4+
class EchoStream extends stream.Writable {
_write(chunk, enc, next) {
console.log(chunk.toString());
next();
}
}
chunk.toString()
perchunk.toString ? chunk.toString() : chunk
– Feminism