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
12 November 2021Di 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
11 November 2021Untuk 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
08 November 2021Ada 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
07 November 2021AsyncLocalStorage
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
14 December 2020Pada 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
03 December 2020Walaupun 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
13 May 2020EventEmitter
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