Tutorial Aliran Node js: Filestream, Pipa
Aliran file di Node.js
Node memanfaatkan aliran secara ekstensif sebagai mekanisme transfer data.
Misalnya, saat Anda mengeluarkan sesuatu ke konsol menggunakan fungsi console.log, Anda sebenarnya menggunakan aliran untuk mengirim data ke konsol.
Node.js juga memiliki kemampuan untuk mengalirkan data dari file agar dapat dibaca dan ditulis dengan tepat. Sekarang kita akan melihat contoh bagaimana kita dapat menggunakan stream untuk membaca dan menulis dari file. Kita perlu mengikuti langkah-langkah yang disebutkan di bawah untuk contoh ini
Langkah 1) Buat file bernama data.txt yang memiliki data di bawah ini. Anggaplah file ini disimpan di drive D mesin lokal kita.
Tutorial Node.js
Pengantar
Kegiatan
Konektivitas Data
Menggunakan Melati
Langkah 2) Tulis kode relevan yang akan menggunakan aliran untuk membaca data dari file.
var fs = require("fs"); var stream; stream = fs.createReadStream("D://data.txt"); stream.on("data", function(data) { var chunk = data.toString(); console.log(chunk); });
Penjelasan Kode: -
- Pertama-tama kita perlu menyertakan modul 'fs' yang berisi semua fungsi yang diperlukan untuk membuat streaming.
- Selanjutnya kita membuat aliran yang dapat dibaca dengan menggunakan metode – createReadStream. Sebagai masukan, kami memberikan lokasi file data.txt kami.
- Fungsi steam.on adalah event handler dan di dalamnya, kita menentukan parameter pertama sebagai 'data'. Ini berarti bahwa setiap kali data masuk dalam aliran dari file, maka jalankan fungsi panggilan balik. Dalam kasus kami, kami mendefinisikan fungsi panggilan balik yang akan menjalankan 2 langkah dasar. Yang pertama adalah mengonversi data yang dibaca dari file sebagai string. Yang kedua adalah mengirim string yang dikonversi sebagai output ke konsol.
- Kami mengambil setiap potongan data yang dibaca dari aliran data dan mengubahnya menjadi string.
- Terakhir, kami mengirimkan output dari setiap potongan string yang dikonversi ke konsol.
Keluaran:
- Jika kode dijalankan dengan benar, Anda akan melihat output di atas di konsol. Output ini akan sama dengan yang ada di file data.txt.
Menulis ke file
Dengan cara yang sama, kita membuat aliran baca, kita juga dapat membuat aliran tulis untuk menulis data ke file. Pertama mari kita buat file kosong tanpa konten bernama data.txt. Anggap saja file ini ditempatkan di drive D komputer kita.
Kode di bawah ini menunjukkan bagaimana kita dapat menulis data ke file.
var fs = require("fs"); var stream; stream = fs.createWriteStream("D://data.txt"); stream.write("Tutorial on Node.js") stream.write("Introduction") stream.write("Events") stream.write("Generators") stream.write("Data Connectivity") stream.write("Using Jasmine")
Penjelasan Kode: -
- Kami membuat aliran yang dapat ditulis dengan menggunakan metode – createWriteStream. Sebagai masukan, kami memberikan lokasi file data.txt kami.
- Selanjutnya kita menggunakan metode stream.write untuk menulis baris teks yang berbeda ke file teks kita. Aliran akan menangani penulisan data ini ke file data.txt.
Jika Anda membuka file data.txt, Anda sekarang akan melihat data berikut di dalam file tersebut
Tutorial Node.js
Pengantar
Kegiatan
Generators
Konektivitas Data
Menggunakan Melati
Pipa di Node.js
Dalam aplikasi Node, aliran dapat disalurkan bersama-sama menggunakan metode pipe(), yang memerlukan dua argumen:
- Aliran yang dapat ditulisi yang diperlukan yang bertindak sebagai tujuan untuk data dan
- Objek opsional yang digunakan untuk meneruskan opsi.
Contoh umum penggunaan pipa, jika Anda ingin mentransfer data dari satu file ke file lainnya.
Jadi mari kita lihat contoh bagaimana kita dapat mentransfer data dari satu file ke file lainnya menggunakan pipa.
Langkah 1) Buat file bernama datainput.txt yang memiliki data di bawah ini. Anggaplah file ini disimpan di drive D mesin lokal kita.
Tutorial Node.js
Pengantar
Kegiatan
Generators
Konektivitas Data
Menggunakan Melati
Langkah 2) Buat file kosong bernama dataOutput.txt dan letakkan di drive D mesin lokal Anda.
Langkah 3) Tulis kode di bawah ini untuk melakukan transfer data dari file datainput.txt ke file dataOutput.txt.
var fs = require("fs"); var readStream = fs.createReadStream("D://datainput.txt"); var writeStream = fs.createWriteStream("D://dataOutput.txt"); readStream.pipe(writeStream);
Penjelasan Kode: -
- Kami pertama-tama membuat "readstream" ke file datainput.txt kami yang berisi semua data kami yang perlu ditransfer ke file baru.
- Kita kemudian perlu membuat “writestream” ke file dataOutput.txt kita, yang merupakan file kosong kita dan merupakan tujuan transfer data dari file datainput.txt.
- Kami kemudian menggunakan perintah pipa untuk mentransfer data dari aliran baca ke aliran tulis. Perintah pipa akan mengambil semua data yang masuk ke aliran baca, dan mendorongnya ke aliran tulis.
Jika sekarang Anda membuka file dataOutput.txt, Anda akan melihat semua data yang ada di file datainput.txt.
Acara di Node.js
Peristiwa adalah salah satu konsep utama di Node.js dan terkadang Node.js disebut sebagai kerangka kerja yang digerakkan oleh peristiwa.
Pada dasarnya peristiwa adalah sesuatu yang terjadi. Misalnya, jika koneksi dibuat ke database, maka peristiwa koneksi database akan dipicu. Pemrograman berbasis peristiwa adalah membuat fungsi yang akan dipicu ketika peristiwa tertentu dipicu.
Mari kita lihat contoh dasar mendefinisikan suatu peristiwa di Node.js.
Kita akan membuat acara bernama 'data_received'. Ketika peristiwa ini dipicu, teks “data diterima” akan dikirim ke konsol.
var events = require('events'); var eventEmitter = new events.EventEmitter(); eventEmitter.on('data_received', function() { console.log('data received succesfully.'); }); eventEmitter.emit('data_received');
Penjelasan Kode: -
- Gunakan fungsi require untuk memasukkan modul 'events'. Dengan modul ini, Anda akan dapat membuat event di Node.js.
- Buat pemancar acara baru. Ini digunakan untuk mengikat acara, yang dalam kasus kita adalah “data_received” ke fungsi panggilan balik yang ditentukan di langkah3.
- Kita mendefinisikan fungsi berbasis peristiwa yang mengatakan bahwa jika peristiwa “data_received” dipicu maka kita harus menampilkan teks “data_received” ke konsol.
- Terakhir, kami memiliki pemicu manual untuk acara kami menggunakan fungsi eventEmiter.emit. Ini akan memicu peristiwa data_received.
Saat program dijalankan, teks “data diterima” akan dikirim ke konsol seperti gambar di bawah ini.
Memancarkan Acara
Saat mendefinisikan peristiwa, ada beberapa metode berbeda untuk peristiwa yang dapat dipanggil. Topik ini berfokus pada melihat masing-masing secara detail.
- Penangan acara satu kali
Terkadang Anda mungkin tertarik untuk bereaksi terhadap suatu peristiwa yang baru pertama kali terjadi. Dalam situasi ini, Anda dapat menggunakan metode Once().
Mari kita lihat bagaimana kita dapat menggunakan metode Once untuk event handler.
Penjelasan Kode: -
- Di sini kita menggunakan metode 'sekali' untuk mengatakan bahwa untuk acara 'data_received', fungsi panggilan balik hanya boleh dijalankan satu kali.
- Di sini kita secara manual memicu acara 'data_received'.
- Ketika peristiwa 'data_received' dipicu lagi, kali ini tidak terjadi apa-apa. Hal ini karena langkah pertama yang kami katakan bahwa peristiwa tersebut hanya dapat dipicu satu kali.
Jika kode dijalankan dengan benar, output di log akan menjadi 'data_berhasil diterima'. Pesan ini hanya akan muncul sekali di konsol.
- Memeriksa Pendengar Acara
Pada titik mana pun dalam masa hidupnya, pemancar peristiwa dapat mempunyai nol atau lebih pendengar yang melekat padanya. Listener untuk setiap jenis peristiwa dapat diperiksa dengan beberapa cara.
Jika Anda hanya tertarik untuk menentukan jumlah pendengar yang terpasang, maka lihatlah metode EventEmitter.listenerCount().
(Catatan: Pendengar penting karena program utama harus mengetahui jika pendengar ditambahkan dengan cepat ke suatu acara, jika tidak, program akan mengalami kegagalan fungsi karena pendengar tambahan akan dipanggil.)
Penjelasan Kode: -
- Kami mendefinisikan tipe eventEmitter yang diperlukan untuk menggunakan metode terkait acara.
- Kami kemudian mendefinisikan sebuah objek yang disebut emitor yang akan digunakan untuk mendefinisikan event handler kami.
- Kami membuat 2 pengendali peristiwa yang pada dasarnya tidak melakukan apa pun. Ini dibuat sederhana untuk contoh kita hanya untuk menunjukkan cara kerja metode ListenerCount.
- Sekarang ketika Anda memanggil metode ListenerCount pada acara data_received kami, itu akan mengirimkan jumlah pendengar acara yang dilampirkan ke acara ini di log konsol.
Jika kode dijalankan dengan benar, nilai 2 akan ditampilkan di log konsol.
- Acara Pendengar baru
Setiap kali event handler baru didaftarkan, event emitor mengeluarkan event newListener. Event ini digunakan untuk mendeteksi event handler baru. Anda biasanya menggunakan event newListener ketika Anda perlu mengalokasikan sumber daya atau melakukan beberapa tindakan untuk setiap event handler baru.
var events = require('events'); var eventEmitter = events.EventEmitter; var emitter = new eventEmitter(); emitter.on("newListener", function(eventName, listener) { console.log("Added listener for " + eventName + " events"); }); emitter.on('data_received', function() {}); emitter.on('data_received', function() {});
Penjelasan Kode: -
- Kami membuat event handler baru untuk event 'newListener'. Jadi setiap kali event handler baru didaftarkan, teks “Added Listener for” + nama event akan ditampilkan di konsol.
- Di sini kita menulis ke konsol teks “Menambahkan pendengar untuk” + nama acara untuk setiap acara yang didaftarkan.
- Kami mendefinisikan 2 event handler untuk acara kami 'data_received'.
Jika kode di atas dijalankan dengan benar, teks di bawah ini akan ditampilkan di konsol. Itu hanya menunjukkan bahwa event handler 'newListener' dipicu dua kali.
Menambahkan pendengar untuk peristiwa data_received
Menambahkan pendengar untuk peristiwa data_received
Ringkasan
- Aliran digunakan di Node.js untuk membaca dan menulis data dari perangkat Input-Output. Node.js memanfaatkan perpustakaan 'fs' untuk membuat aliran yang dapat dibaca dan ditulis ke file. Aliran ini dapat digunakan untuk membaca dan menulis data dari file.
- Pipa dapat digunakan untuk menghubungkan beberapa aliran secara bersamaan. Salah satu contoh yang paling umum adalah menyalurkan aliran baca dan tulis secara bersamaan untuk transfer data dari satu file ke file lainnya.
- Node.js sering juga ditandai sebagai kerangka kerja yang digerakkan oleh peristiwa, dan sangat mudah untuk mendefinisikan peristiwa di Node.js. Fungsi dapat didefinisikan yang merespons peristiwa ini.
- Peristiwa juga memaparkan metode untuk merespons peristiwa penting. Sebagai contoh, kita telah melihat event handler Once() yang dapat digunakan untuk memastikan bahwa fungsi callback hanya dijalankan satu kali ketika suatu event dipicu.