Pipe yang kita mungkin ketahui adalah pipa / saluran air mungkin bisa diartikan sama dengan itu biar mudah dipahami
pipe didalam Node digunakan untuk mentransfer data yang bentuknya bisa stream buffer atau type data lainya namun didalam penulisan
implementasinya ada beberapa aturan yang harus diikuti.
Biasanya method listener yang terdapat di beberapa api nodejs sudah secara default dipasang misalnya pada filesystem "createReadStream"
kita bisa langsung menggunakan pipe didalamnya untuk berkomunikasi dengan filesystem "createWriteStream", kali ini kita akan mempelajari
bagaimana tehnik ini dapat bekerja.
Sebelumnya Pipe ini terbagi menjadi 4 type, yang pertama adalah Readable, Writable, Duplex dan Transform.
Semuanya memiliki properti yang satu sama lainya saling membagi dan menerima data yaitu read dan write, adapun didalam method write
ada 3 argument didalamnya, yang akan saya contohkan pada contoh script nanti.
tapi sebelumnya kita membutuhkan apinya node yang namanya "util" untuk meng Extends fungsi didalamnya dan dikirim menjadi
method atau sebaliknya.
Berikut contoh kodenya: eg: [ buat file js dengan nama run.js ]
//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
var stream = require('stream');
var util = require('util');
util.inherits(Human, stream.Readable);
function Human(){
stream.Readable.call(this);
this.stop = null;
this.jagoan = [ "Spiderman", "Hulk" ];
this.anakJagoan = "Anaknya ";
this._writeAppend= function(){
for(var i in this.jagoan){
this.push( this.anakJagoan + this.jagoan[i] );
}
}
this._read= function(){
this._writeAppend();
for(var i in this.jagoan){
this.push( this.jagoan[i] );
}
this.push( this.stop );
}
}
util.inherits(Quetion, stream.Writable);
function Quetion(){
stream.Writable.call(this);
this.que = [ " Nama Kamu siapa ? ", " Nama Saya " ];
this.index = 0;
this._write= function( chunk, enc, next ){
var context = chunk.toString() + ': ' + (this.que[ this.index % 2 ]) + ( (this.index % 2)?chunk.toString():'' );
console.log( context );
this.index++;
next();
}
}
new Human().pipe( new Quetion() );
//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
Penjelasan kode diatas,
Pertama kita membutuhkan 2 api sebagai contoh yaitu stream dan util
Stream ini fungsinya untuk membuffer Object / Function
" var stream = require('stream'); "
didalam stream ada 4 method yang akan kita gunakan yaitu: Readable, Writable, Duplex dan Transform.
tapi contoh diatas hanya Readable dan Writable saja.
" var util = require('util'); " => " util.inherits(Human, stream.Readable); " dan " util.inherits(Human, stream.Readable); "
Kemudian util yang fungsinya untuk membungkus kedua Object tersebut [ Function dan Stream Type ] dengan method util sendiri yaitu "inherit"
atau penurunan sifat dari object stream tersebut.
" stream.Readable.call(this); " dan " stream.Writable.call(this); "
didalam masing masing Object / Function kita imlementasikan dulu pemanggilan fungsi objectnya sendiri ( this ) yaitu fungsi
standard javascript "call" kedalam stream Readable maupun Writable
" new Human().pipe( new Quetion() ); "
Terakhir buat object baru dimasing masing fungsinya dan lakukan tehnik pipe dari Readable kedalam object Writable tadi
untuk mencobanya buka console ketikan "node run.js" didalam folder projectnya.
salam