Tag: Node

Node.js adalah JavaScript runtime yang menggunakan Chrome’s V8 Engine namun ditujukan untuk pemograman di-sisi back end (dijalankan diluar browser). Karena aplikasi yang dijalankan diluar browser memiliki kebutuhan yang berbeda, Node.js menyertakan modul yang tidak dijumpai di JavaScript untuk browser, seperti File system (untuk melihat isi direktori, membaca, menulis dan menghapus file), Net (untuk membuka socket guna mengirim dan/atau memerima pesan dari komputer lain melalui port TCP/UDP), dan sebagainya.

Memakai Iterator Dan Generator Di Node.js

Di JavaScript, tidak ada class khusus untuk mewakili iterator. Semua object adalah iterator bila object tersebut memiliki sebuah method dengan nama next() yang mengembalikan sebuah object yang mengandung value dan/atau done. Ini disebut sebagai iterator protocol. Sebuah object disebut sebagai iterable apabila ia memiliki method dengan nama @@iterator (Symbol.iterator) yang mengembalikan sebuah iterator. Untuk next() yang dikerjakan secara asynchronous (seperti async next()), saya dapat mengganti @@iterator menjadi @@asyncIterator (Symbol.asyncIterator). Object dari String, Array, TypedArray, Map dan Set merupakan iterable. Konstruksi for...of dan for await...of dapat dipakai untuk melakukan iterasi pada iterable.

Kategori: Pemograman Tags: Node

Memakai Stream Di Node.js

Untuk membaca sebuah file, saya dapat menggunakan modul fasilitas yang ditawarkan oleh fs seperti readFile() untuk versi asynchronous atau readFileSync() untuk versi synchronous. Kedua functions tersebut akan membaca seluruh isi file dan menyimpannya ke memori (RAM) sebagai Buffer. Namun, sama seperti proses lainnya di sistem operasi, aplikasi Node.js juga memiliki batasan alokasi memori. Sebagai contoh, pada sistem saya, ukuran Buffer maksimum adalah 2 GB. Bila saya membaca file lebih besar dari 2 GB dengan readFile() atau readFileSync(), saya akan memperoleh pesan kesalahan seperti Range Error [ERR_FS_FILE_TOO_LARGE]: File size is greater than 2 GB. Apa yang harus saya lakukan bila tetap ingin memproses file tersebut? Saya bisa menggunakan Stream yang akan memproses file dalam bentuk potongan-potongan kecil. Secara garis besar, walaupun lebih rumit, stream akan lebih efisien terutama dalam memproses file besar.

Kategori: Pemograman Tags: Node

Menjalankan Kode Program Native Di Node.js

Ada kalanya modul bawaan Node.js tidak cukup dan programmer perlu mengakses fitur native di sistem operasi. Untuk itu, Node.js memiliki fasilitas memanggil kode program native yang ditulis dalam bahasa C/C++. Untuk mengetahui package yang menggunakan kode program native, saya dapat mencari file berakhiran *.node di node_modules. Sebagai contoh, package fsevents yang popular berisi kode program native dalam C untuk memberikan notifikasi bila file di folder tertentu berubah di sistem operasi Mac. Pada artikel ini, saya akan mencoba memanggil kode program native C yang menggunakan Xlib untuk menampilkan sebuah window di dekstop Linux.

Kategori: Pemograman Tags: Node

Memakai Asynchronous Context Tracking Di Node.js

AsyncLocalStorage adalah class bawaan Node (terletak di modul async_hooks) yang dapat digunakan untuk memberikan context pada eksekusi operasi asynchronous dan juga semua operasi asynchronous yang dipanggil oleh operasi tersebut. Untuk menunjukkan kondisi dimana class ini dapat membantu, saya menulis sebuah kode program tanpa async context seperti berikut ini:

Kategori: Pemograman Tags: Node

Membuat Unit Test Yang Melibatkan Waktu

Pada suatu hari, saya ingin membuat unit test untuk menguji kode program yang menggunakan setInterval(). Bagaimana caranya memastikan bahwa kode program sudah benar melakukan sebuah operasi secara berulang kali, tanpa harus menunggu? Contoh lain yang berkaitan dengan waktu adalah menguji kode program yang akan mengirim notifikasi kegagalan bila tidak ada respon yang diterima selama 30 menit. Bagaimana cara memastikan bahwa kode program tersebut telah benar tanpa harus menunggu 30 menit?

Kategori: Pemograman Tags: Node

Event Loop Di Node.js

Walaupun Node.js tidak mendukung multi-threading, ia memiliki implementasi event loop untuk mengerjakan kode program secara asynchronous. Sebenarnya kemampuan mengerjakan kode program secara asynchronous tidak ada kaitannya dengan threading, tetapi dalam banyak hal, saya tidak perlu tahu lebih detail. Selama kode program bisa dijalankan secara asynchronous (misalnya melalui Promise dan timer), saya tidak pernah harus mengetahui implementasi detail event loop di Node.js. Akan tetapi, saat saya mencoba menerapkan konsep worker (yang umum dipakai di bahasa multi-threading) dengan menggunakan Promise, saya mulai menemukan banyak masalah. Sebagai contoh, saya membuat kode program seperti berikut ini:

Kategori: Pemograman Tags: Node

Menangkap Kesalahan Saat Menggunakan EventEmitter

EventEmitter merupakan salah satu class penting di Node.js untuk pekerjaan asynchronous berbasis event. Salah satu contoh penggunaannya yang paling populer adalah sebagai Stream seperti pada fs.ReadStream, http2.ServerHttp2Stream, dan sebagainya. Tentu saja saya juga bisa membuat class turunan dari EventEmitter untuk keperluan pribadi, misalnya pada contoh kode program berikut ini:

Kategori: Pemograman Tags: Node TypeScript