0% menganggap dokumen ini bermanfaat (0 suara)
6 tayangan180 halaman

Panduan Pemrograman Web Node.js

Diunggah oleh

belajar.from0
Hak Cipta
© All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
6 tayangan180 halaman

Panduan Pemrograman Web Node.js

Diunggah oleh

belajar.from0
Hak Cipta
© All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd

Pemrograman Web Framework dengan Node.

js I i
ii I Pemrograman Web Framework dengan [Link]
Tri Sandhika Jaya, [Link]., [Link]. ,
Panji Andhika Pratomo, [Link]., M.T.I. ,
Dewi Kania Widyawati, [Link]., [Link].

Pemrograman Web Framework dengan [Link] I iii


Pemrograman Web Framework dengan [Link]
Copyright © PT Penamuda Media, 2024

Penulis:
Tri Sandhika Jaya, [Link]., [Link]. ,
Panji Andhika Pratomo, [Link]., M.T.I. ,
Dewi Kania Widyawati, [Link]., [Link].

ISBN: 978-634-7062-21-5
Penyunting dan Penata Letak:
Tim PT Penamuda Media
Desain Sampul:
Tim PT Penamuda Media
Penerbit:
PT Penamuda Media
Redaksi:
Casa Sidoarum RT03 Ngentak, Sidoarum Godean Sleman Yogyakarta
Web: [Link]
E-mail: penamudamedia@[Link]
Instagram: @penamudamedia
WhatsApp: +6285700592256

Cetakan Pertama, Desember 2024


viii + 172 halaman; 15 x 23 cm

Hak cipta dilindungi undang-undang


Dilarang memperbanyak maupun mengedarkan buku dalam bentuk dan

dengan cara apapun tanpa izin tertulis dari penerbit maupun penulis

iv I Pemrograman Web Framework dengan [Link]


Kata Pengantar

Puji dan syukur kami panjatkan ke hadirat Tuhan


Yang Maha Esa, yang telah memberikan kesehatan,
kekuatan, dan kesempatan sehingga buku berjudul
"Pemrograman Web Framework dengan [Link]" ini
dapat diselesaikan dengan baik. Buku ini hadir sebagai
panduan praktis dan teoritis bagi pembaca yang ingin
mendalami pengembangan aplikasi web menggunakan
[Link], sebuah platform runtime JavaScript yang semakin
populer di kalangan pengembang karena kecepatannya
dan fleksibilitasnya.
Dalam era digital saat ini, kebutuhan akan aplikasi
web yang cepat, efisien, dan mudah dikembangkan terus
meningkat. [Link] menjadi salah satu teknologi utama
yang memungkinkan pengembang membangun aplikasi
web modern dengan performa tinggi. Buku ini dirancang
untuk memberikan pembaca pemahaman mendalam
tentang dasar-dasar [Link], cara kerja framework
berbasis [Link], hingga penerapannya dalam
membangun aplikasi web yang kompleks.

Pemrograman Web Framework dengan [Link] I v


Materi dalam buku ini disusun secara sistematis
agar mudah dipahami oleh pembaca, baik yang baru
memulai belajar pemrograman web maupun yang sudah
memiliki pengalaman di bidang ini. Setiap bab dilengkapi
dengan contoh-contoh implementasi dan latihan praktis
untuk membantu pembaca memahami konsep-konsep
yang dijelaskan secara lebih mendalam.
Kami menyadari bahwa buku ini masih jauh dari
sempurna. Oleh karena itu, kritik dan saran yang
membangun dari pembaca sangat kami harapkan untuk
penyempurnaan buku ini di masa mendatang. Akhir kata,
kami mengucapkan terima kasih kepada semua pihak
yang telah mendukung penyusunan buku ini, terutama
kepada para pengembang komunitas [Link] yang telah
menyediakan dokumentasi dan sumber daya yang luar
biasa. Semoga buku ini dapat memberikan manfaat dan
menjadi referensi yang berharga bagi pembaca dalam
belajar dan mengembangkan kemampuan pemrograman
web mereka.

Kota, Desember 2024

Penulis

vi I Pemrograman Web Framework dengan [Link]


Daftar Isi

Kata Pengantar .............................................................................................. v


Daftar Isi ........................................................................................................ vii
Bab 1 Pengantar Pemrograman Web ................................................... 1
A. Definisi dan Konsep Pemrograman Web ............................. 1
B. Evolusi Pemrograman Web: Dari Server-Side ke Client-
Side ............................................................................................................ 12
C. Peran Framework dalam Pengembangan Web
Modern ..................................................................................................... 18
Bab 2 Pengenalan [Link] ...................................................................... 24
A. Apa itu [Link] ............................................................................. 24
B. Sejarah dan Perkembangan [Link] .................................... 28
C. Mengapa Memilih [Link] untuk Pengembangan
Web? .......................................................................................................... 32
D. Arsitektur [Link] ....................................................................... 37
E. Instalasi [Link] dan Lingkungan Kerja............................. 42
F. NPM (Node Package Manager) .............................................. 50
Bab 3: Dasar-Dasar JavaScript pada [Link] .................................. 57
A. Pengantar JavaScript di Lingkungan Server .................... 57
B. Variabel, Tipe Data, dan Operator ........................................ 61
C. Struktur Kontrol dan Fungsi................................................... 66
D. Asynchronous Programming pada [Link] ...................... 70
E. Callback, Promise, dan Async/Await .................................. 74
Bab 4: Membuat API REST dengan [Link] .................................... 80
A. Konsep API REST......................................................................... 80
B. Membuat Server dengan [Link] .................................... 84
C. Menangani Request dan Response ...................................... 90
D. Implementasi CRUD dengan [Link] ............................. 95
Bab 5: Middleware dalam [Link] ................................................... 100
A. Apa Itu Middleware?............................................................... 100

Pemrograman Web Framework dengan [Link] I vii


B. Jenis-Jenis Middleware .......................................................... 104
C. Menangani Error dengan Middleware ............................ 110
Bab 6: Manajemen Database dengan [Link] ............................. 115
A. Database Relasional vs Non-Relasional .......................... 115
B. Menggunakan MongoDB dengan [Link]....................... 119
C. Query Database dengan Mongoose .................................. 123
D. Validasi dan Relasi Data ......................................................... 127
Bab 7: Autentikasi dan Otorisasi ...................................................... 131
A. Konsep Dasar Autentikasi dan Otorisasi ........................ 131
B. Autentikasi Menggunakan JWT (JSON Web Token) .. 134
C. Mengamankan Endpoint dengan JWT ............................. 137
D. Otorisasi Berdasarkan Role dan Permission ................ 140
Bab 8 : Pemeliharaan dan Skala Aplikasi [Link]...................... 144
A. Pengujian Aplikasi ................................................................... 144
B. Debugging Aplikasi .................................................................. 148
C. Optimasi Kinerja ....................................................................... 151
D. Keamanan Aplikasi ................................................................. 155
E. Deploy Aplikasi ......................................................................... 159
Daftar Pustaka.......................................................................................... 165
Tentang Penulis ....................................................................................... 169

viii I Pemrograman Web Framework dengan [Link]


Bab 1 Pengantar
Pemrograman Web
A. Definisi dan Konsep Pemrograman Web
Pemrograman web secara umum dapat
diartikan sebagai proses pembuatan, pengembangan,
dan pemeliharaan aplikasi berbasis web yang berjalan
melalui internet. Proses ini melibatkan penggunaan
berbagai teknologi, seperti HTML, CSS, dan JavaScript,
untuk membangun antarmuka pengguna, serta bahasa
pemrograman server-side, seperti PHP, Python, atau
[Link], untuk menangani logika dan komunikasi
dengan database. Pemrograman web memungkinkan
pengembang menciptakan situs web interaktif dan
dinamis yang dapat diakses oleh pengguna dari
berbagai perangkat. Dalam pengembangannya,
pemrograman web memerlukan pemahaman
mendalam tentang desain, logika, keamanan, dan
performa agar aplikasi yang dihasilkan dapat
memenuhi kebutuhan pengguna secara optimal.
Menurut John Duckett (2014), seorang ahli
dalam pengembangan web, pemrograman web adalah
kombinasi antara elemen desain dan fungsi teknis

Pemrograman Web Framework dengan [Link] I 1


yang digunakan untuk menciptakan pengalaman
digital yang menarik dan interaktif. Ia menekankan
pentingnya HTML sebagai kerangka dasar, CSS untuk
estetika, dan JavaScript sebagai elemen interaktif. Bagi
Duckett, pemrograman web bukan hanya tentang
membangun situs web, tetapi juga tentang
menyampaikan informasi secara efektif dan intuitif.
Sementara itu, Robert W. Sebesta (2016), dalam
bukunya Programming the World Wide Web,
mendefinisikan pemrograman web sebagai proses
penggunaan teknologi dan bahasa pemrograman
untuk membangun aplikasi berbasis internet yang
dapat diakses melalui protokol HTTP. Ia menekankan
pentingnya konektivitas antara klien dan server dalam
menciptakan aplikasi web yang andal. Menurutnya,
pemrograman web adalah inti dari perkembangan
teknologi digital yang menghubungkan manusia
dengan informasi di seluruh dunia (Sud & Sud, 2020).
Paul Deitel dan Harvey Deitel (2015) juga
memberikan pandangan mereka dalam buku Internet
& World Wide Web: How to Program. Mereka
menjelaskan bahwa pemrograman web adalah suatu
seni dan ilmu dalam menciptakan aplikasi berbasis
web yang menggabungkan elemen-elemen visual,

2 I Pemrograman Web Framework dengan [Link]


logika bisnis, dan komunikasi data. Deitel bersaudara
menyoroti pentingnya penguasaan teknologi seperti
AJAX, API, dan framework modern untuk
menghadirkan pengalaman pengguna yang kaya dan
efisien.
Pemrograman web adalah integrasi antara
teknologi backend dan frontend untuk menciptakan
aplikasi yang dapat diakses melalui peramban. Ia
menekankan pentingnya aspek server-side, seperti
pengelolaan basis data dan autentikasi pengguna,
dalam membangun aplikasi yang aman dan skalabel.
Walther juga menyebut bahwa pemrograman web
terus berkembang seiring dengan munculnya
framework dan teknologi baru. Menurut Jeffrey C.
Jackson (2006), pemrograman web adalah proses
kreatif dan teknis dalam mengembangkan sistem
berbasis web yang memanfaatkan teknologi internet.
Ia menekankan bahwa pemrograman web tidak hanya
tentang pengembangan antarmuka pengguna, tetapi
juga melibatkan implementasi logika bisnis dan
pengelolaan data. Jackson melihat pemrograman web
sebagai dasar dari aplikasi modern, seperti e-
commerce, media sosial, dan layanan berbasis cloud.

Pemrograman Web Framework dengan [Link] I 3


Melalui berbagai definisi tersebut, terlihat
bahwa pemrograman web adalah disiplin yang
kompleks dan terus berkembang. Dari perspektif para
ahli, pemrograman web mencakup aspek teknis,
kreatif, dan strategis untuk membangun aplikasi yang
memenuhi kebutuhan pengguna. Hal ini melibatkan
pemahaman mendalam tentang teknologi web, desain
interaktif, dan konektivitas data (Amirulloh et al.,
2024).
Pada akhirnya, pemrograman web tidak hanya
berfungsi sebagai alat untuk menciptakan situs atau
aplikasi, tetapi juga menjadi pilar utama dalam
transformasi digital di berbagai sektor. Dengan
kemampuan untuk menghubungkan pengguna,
informasi, dan layanan di seluruh dunia, pemrograman
web terus menjadi elemen penting dalam kemajuan
teknologi dan kehidupan modern.

Sejarah pemrograman web dari global hingga


Indonesia
Sejarah pemrograman web bermula sejak
ditemukannya World Wide Web (WWW) pada tahun
1989 oleh Tim Berners-Lee, seorang ilmuwan
komputer asal Inggris yang bekerja di CERN

4 I Pemrograman Web Framework dengan [Link]


(European Organization for Nuclear Research), Swiss.
Berners-Lee menciptakan WWW sebagai sistem untuk
berbagi dokumen secara lintas jaringan menggunakan
protokol Hypertext Transfer Protocol (HTTP). Pada
tahun 1990, ia juga mengembangkan peramban web
pertama yang disebut WorldWideWeb (kemudian
diganti menjadi Nexus) serta editor teks untuk
mendukung sistem ini. Penemuan ini menandai awal
dari era web modern, dengan hypertext sebagai basis
utama untuk menghubungkan informasi melalui
hyperlink.
Pada tahun 1991, Tim Berners-Lee
mempublikasikan web pertama yang berfungsi
sebagai panduan tentang cara menggunakan teknologi
ini. Dokumen tersebut menggunakan HyperText
Markup Language (HTML), yang hingga kini menjadi
bahasa utama dalam membangun halaman web. HTML
memungkinkan pembuatan struktur sederhana untuk
menampilkan teks dan gambar pada halaman web.
Seiring waktu, perkembangan web mulai melibatkan
elemen desain, interaktivitas, dan konektivitas yang
lebih kompleks, memunculkan kebutuhan akan bahasa
pemrograman tambahan.

Pemrograman Web Framework dengan [Link] I 5


Awal tahun 1990-an menjadi tonggak penting
dengan munculnya peramban web seperti Mosaic
pada tahun 1993, yang dikembangkan oleh Marc
Andreessen dan timnya di National Center for
Supercomputing Applications (NCSA). Mosaic adalah
peramban grafis pertama yang dapat menampilkan
teks dan gambar secara bersamaan, menjadikan
internet lebih mudah diakses oleh masyarakat umum.
Hal ini mendorong popularitas web dan membuka
peluang besar untuk pengembangan situs web.
Pada pertengahan 1990-an, bahasa
pemrograman web mulai berkembang pesat. Bahasa
seperti JavaScript, yang dirilis oleh Netscape pada
tahun 1995, memungkinkan pengembang
menambahkan interaktivitas ke situs web. Di sisi
server, teknologi seperti Common Gateway Interface
(CGI) mulai digunakan untuk memproses data dari
pengguna, diikuti oleh bahasa seperti PHP (dirilis
tahun 1995) dan ASP (Active Server Pages) dari
Microsoft pada tahun 1996. Teknologi ini
memungkinkan situs web menjadi lebih dinamis,
memungkinkan pengembang untuk mengelola
database dan menghasilkan konten secara otomatis.

6 I Pemrograman Web Framework dengan [Link]


Sementara itu, teknologi web terus berkembang
seiring dengan kebutuhan untuk meningkatkan desain
dan fungsionalitas. Pada tahun 1996, CSS (Cascading
Style Sheets) diperkenalkan oleh W3C (World Wide
Web Consortium) untuk mengatur tampilan visual
halaman web secara terpisah dari struktur HTML. CSS
memberikan fleksibilitas lebih dalam mendesain web,
memungkinkan elemen seperti warna, font, dan tata
letak dikendalikan dengan lebih mudah.
Masuk ke era 2000-an, pemrograman web
mengalami lompatan besar dengan munculnya AJAX
(Asynchronous JavaScript and XML), yang
memungkinkan komunikasi antara klien dan server
tanpa perlu memuat ulang seluruh halaman. Teknologi
ini menjadi dasar dari aplikasi web modern, seperti
Gmail dan Google Maps, yang menawarkan
pengalaman pengguna yang lebih lancar dan interaktif.
AJAX membuka jalan bagi perkembangan framework
dan library seperti jQuery, AngularJS, dan React, yang
mempermudah pengembangan web.
Dalam dekade terakhir, pemrograman web
semakin berkembang dengan munculnya [Link] pada
tahun 2009, yang memungkinkan penggunaan
JavaScript di sisi server. [Link] memperkenalkan

Pemrograman Web Framework dengan [Link] I 7


paradigma baru dalam pengembangan web, dengan
fokus pada kecepatan dan efisiensi. Selain itu,
teknologi seperti Progressive Web Apps (PWA) dan
Single Page Applications (SPA) semakin memperluas
cakupan pemrograman web, menjadikannya relevan
untuk perangkat modern seperti ponsel pintar.
Hingga kini, pemrograman web terus
berevolusi, didukung oleh inovasi dalam teknologi
cloud, artificial intelligence (AI), dan internet of things
(IoT). Perjalanan sejarahnya, dari sistem sederhana
berbasis hypertext hingga aplikasi kompleks berbasis
web, menunjukkan betapa dinamisnya bidang ini
dalam merespons kebutuhan masyarakat global.
Pemrograman web tidak hanya menjadi alat untuk
berbagi informasi, tetapi juga fondasi utama dalam
membangun ekosistem digital yang menghubungkan
dunia.
Masuknya pemrograman web ke Indonesia
dimulai pada pertengahan tahun 1990-an, seiring
dengan berkembangnya infrastruktur internet di
tanah air. Kehadiran internet pertama kali di Indonesia
diawali dengan pendirian Paguyuban Network pada
tahun 1992, sebuah komunitas teknologi yang
beranggotakan akademisi dan praktisi teknologi

8 I Pemrograman Web Framework dengan [Link]


informasi. Komunitas ini mulai memperkenalkan
konsep jaringan berbasis protokol internet. Kemudian,
pada tahun 1994, PT IndoInternet (IndoNet) menjadi
penyedia layanan internet komersial pertama di
Indonesia. Dengan berkembangnya akses internet,
konsep pengembangan web mulai diperkenalkan,
khususnya di kalangan institusi pendidikan, bisnis,
dan pemerintah.
Pada masa itu, pengembangan situs web di
Indonesia masih sangat sederhana dan terbatas pada
penggunaan HTML dasar. Situs-situs pertama di
Indonesia mulai bermunculan, seperti situs web
institusi pendidikan, termasuk Universitas Indonesia
(UI) dan Institut Teknologi Bandung (ITB), yang
menggunakan situs web untuk menyebarkan
informasi akademik. Pemerintah juga mulai
membangun situs web sebagai bagian dari digitalisasi
layanan publik. Salah satu situs pemerintah pertama
yang hadir adalah [Link], yang
diluncurkan sebagai portal resmi informasi negara.
Memasuki akhir 1990-an, pemrograman web di
Indonesia mulai berkembang pesat seiring dengan
hadirnya dot-com boom di dunia. Bisnis berbasis
internet mulai bermunculan, seperti [Link] pada

Pemrograman Web Framework dengan [Link] I 9


tahun 1998, yang menjadi salah satu portal berita
online pertama di Indonesia. [Link] menjadi
contoh awal bagaimana pemrograman web digunakan
untuk menciptakan platform berita yang dapat diakses
secara real-time oleh masyarakat luas. Selain itu,
sektor perbankan dan keuangan juga mulai
mengadopsi teknologi web, dengan hadirnya layanan
perbankan online seperti KlikBCA.
Pada awal tahun 2000-an, pengembangan web
di Indonesia mulai memasuki era dinamis, dengan
penggunaan teknologi server-side seperti PHP dan
MySQL. Banyak pengembang di Indonesia mulai
belajar bahasa pemrograman ini karena
kemudahannya dan sumber daya yang melimpah. CMS
(Content Management System) seperti Joomla dan
WordPress juga mulai digunakan secara luas,
memudahkan individu dan organisasi untuk
membangun situs web tanpa memerlukan
pengetahuan pemrograman yang mendalam.
Pendidikan tentang pemrograman web mulai
menjadi bagian dari kurikulum di beberapa
universitas dan lembaga pelatihan teknologi di
Indonesia. Banyak institusi mulai membuka jurusan
teknologi informasi dan ilmu komputer yang fokus

10 I Pemrograman Web Framework dengan [Link]


pada pengembangan web. Selain itu, komunitas-
komunitas pengembang web mulai terbentuk, seperti
ID-Drupal, PHP Indonesia, dan CodeIgniter Indonesia,
yang menjadi wadah bagi para pengembang untuk
berbagi pengetahuan dan pengalaman.
Perkembangan signifikan terjadi pada dekade
2010-an, ketika startup berbasis teknologi mulai
bermunculan di Indonesia. Dengan adopsi teknologi
web yang lebih canggih, startup seperti Tokopedia
(didirikan tahun 2009) dan Bukalapak (2010)
memanfaatkan framework modern seperti [Link] dan
[Link] untuk membangun aplikasi berbasis web yang
cepat dan skalabel. Keberhasilan startup-startup ini
menunjukkan potensi besar pemrograman web
sebagai salah satu tulang punggung ekonomi digital di
Indonesia.
Masifnya penggunaan smartphone dan
penetrasi internet yang terus meningkat juga memicu
pengembangan web yang lebih responsif dan adaptif.
Teknologi seperti Progressive Web Apps (PWA) mulai
diadopsi untuk menjangkau pengguna di berbagai
platform, baik desktop maupun perangkat seluler.
Selain itu, pemerintah Indonesia mulai mendorong
digitalisasi melalui program seperti Gerakan 1.000

Pemrograman Web Framework dengan [Link] I 11


Startup Digital dan Making Indonesia 4.0, yang
memperkuat ekosistem pemrograman web dan
teknologi digital secara keseluruhan.
Sekarang, pemrograman web di Indonesia terus
berkembang seiring dengan kebutuhan digitalisasi di
berbagai sektor. Dari pendidikan hingga bisnis, dari
layanan publik hingga hiburan, pemrograman web
telah menjadi bagian integral dari kehidupan
masyarakat Indonesia. Dengan hadirnya teknologi
terbaru seperti cloud computing, artificial intelligence
(AI), dan big data, pengembang web di Indonesia
memiliki peluang besar untuk terus berinovasi dan
bersaing di kancah global.
B. Evolusi Pemrograman Web: Dari Server-Side ke
Client-Side
Pemrograman web telah mengalami evolusi
yang signifikan sejak kemunculannya pada akhir
1980-an hingga era modern saat ini. Perubahan ini
terutama terlihat dari bagaimana logika dan proses
pengolahan data yang awalnya terpusat di sisi server
(server-side) kini mulai bergeser secara bertahap ke
sisi klien (client-side). Evolusi ini didorong oleh
perkembangan teknologi, peningkatan kebutuhan
pengguna, serta kecepatan internet yang semakin baik,

12 I Pemrograman Web Framework dengan [Link]


sehingga memungkinkan aplikasi web menjadi lebih
interaktif, responsif, dan efisien (Setiawan et al., 2024).

Era Awal: Server-Side sebagai Pusat Pemrosesan


Pada era awal pengembangan web,
pemrograman web berbasis server-side
mendominasi. Pada pendekatan ini, seluruh logika
aplikasi, pengolahan data, dan rendering halaman
web dilakukan di server. Saat pengguna mengakses
sebuah situs web, permintaan (request)
dikirimkan ke server, kemudian server memproses
permintaan tersebut dan mengembalikan respon
berupa halaman HTML yang sudah di-generate.
Teknologi seperti CGI (Common Gateway
Interface) menjadi pionir dalam pengolahan
server-side, memungkinkan situs web untuk
memproses data pengguna melalui formulir.
Seiring waktu, bahasa pemrograman seperti PHP,
ASP (Active Server Pages), dan JSP (Java Server
Pages) menjadi populer untuk mempermudah
pembuatan aplikasi web dinamis. Pendekatan ini
memungkinkan pembuatan konten yang
dipersonalisasi, seperti hasil pencarian atau
halaman login, tetapi sering kali membutuhkan

Pemrograman Web Framework dengan [Link] I 13


waktu lebih lama karena setiap permintaan
melibatkan komunikasi berulang dengan server.

Keterbatasan Server-Side
Meskipun server-side memiliki keunggulan
dalam hal kontrol dan keamanan data, pendekatan
ini memiliki beberapa keterbatasan. Salah satunya
adalah kecepatan dan pengalaman pengguna yang
kurang optimal. Setiap perubahan kecil, seperti
mengisi formulir atau mengganti halaman,
memerlukan proses memuat ulang seluruh
halaman (page reload). Hal ini membuat
pengalaman pengguna terasa lambat, terutama di
jaringan internet yang tidak stabil.
Selain itu, jumlah permintaan ke server yang
meningkat drastis dapat memperlambat performa,
terutama pada aplikasi web yang digunakan oleh
banyak pengguna secara bersamaan. Keterbatasan
ini mendorong para pengembang untuk mencari
solusi yang lebih efisien dengan memindahkan
sebagian logika pemrosesan ke sisi klien.

14 I Pemrograman Web Framework dengan [Link]


Peralihan ke Client-Side: Interaktivitas dan Kecepatan
Peralihan menuju client-side programming
dimulai dengan munculnya JavaScript pada tahun
1995, yang dikembangkan oleh Netscape.
JavaScript memungkinkan pengembang untuk
menambahkan logika dan interaktivitas langsung
di peramban pengguna tanpa perlu terus-menerus
berkomunikasi dengan server. Dengan JavaScript,
halaman web menjadi lebih dinamis, seperti
memungkinkan validasi formulir, manipulasi
elemen HTML, dan animasi sederhana.
Evolusi ini semakin berkembang dengan
hadirnya teknologi AJAX (Asynchronous JavaScript
and XML) pada awal 2000-an. AJAX memungkinkan
komunikasi antara klien dan server secara
asinkron tanpa harus memuat ulang halaman
secara keseluruhan. Teknologi ini membuka jalan
bagi aplikasi web modern seperti Gmail dan Google
Maps, yang menawarkan pengalaman pengguna
yang lebih interaktif dan cepat.
Framework dan Library Modern
Memasuki dekade 2010-an, pengembangan
client-side semakin dipermudah dengan
munculnya berbagai framework dan library

Pemrograman Web Framework dengan [Link] I 15


JavaScript seperti React, Angular, dan [Link].
Framework ini memberikan struktur yang lebih
jelas dalam membangun aplikasi web kompleks di
sisi klien. Selain itu, fitur seperti komponen
reusable, state management, dan virtual DOM
membuat pengembangan lebih efisien dan mudah
di-maintain.
Client-side programming juga didukung oleh
perkembangan teknologi seperti WebAssembly,
yang memungkinkan pemrosesan yang lebih berat,
seperti gaming atau pengolahan data, dilakukan
langsung di browser dengan performa mendekati
aplikasi native. Dengan teknologi ini, batas antara
aplikasi web dan aplikasi desktop semakin tipis
(Reid et al., 2023).

Pendekatan Hybrid: Full-Stack dan Isomorphic


Applications
Meskipun pemrosesan client-side
menawarkan kecepatan dan pengalaman
pengguna yang lebih baik, server-side tetap
memiliki peran penting, terutama untuk tugas yang
memerlukan keamanan tinggi atau pengolahan
data besar. Oleh karena itu, pendekatan hybrid

16 I Pemrograman Web Framework dengan [Link]


mulai digunakan, di mana logika aplikasi dibagi
antara server-side dan client-side. Contohnya
adalah [Link], yang memungkinkan penggunaan
JavaScript di kedua sisi, sehingga pengembang
dapat membuat aplikasi full-stack dengan efisiensi
yang lebih tinggi.
Selain itu, konsep isomorphic applications
juga menjadi populer, di mana aplikasi dapat
dijalankan di server maupun klien tergantung pada
kebutuhan. Dengan pendekatan ini, pengembang
dapat memastikan pengalaman pengguna yang
optimal tanpa mengorbankan kecepatan dan
skalabilitas.
Evolusi dari server-side ke client-side tidak
berarti menggantikan pendekatan yang satu
dengan yang lain, melainkan menciptakan
ekosistem yang saling melengkapi. Di masa depan,
teknologi seperti Progressive Web Apps (PWA),
Server-Side Rendering (SSR) untuk SEO, serta
integrasi dengan Artificial Intelligence (AI) dan
Internet of Things (IoT) akan semakin memperluas
potensi pemrograman web.
Pemrograman web kini tidak lagi hanya
tentang membangun situs web, tetapi juga

Pemrograman Web Framework dengan [Link] I 17


menciptakan aplikasi lintas platform yang dapat
dijalankan di berbagai perangkat dengan performa
yang optimal. Perjalanan dari server-side ke client-
side mencerminkan betapa dinamisnya dunia
pemrograman web dalam memenuhi kebutuhan
pengguna modern.

C. Peran Framework dalam Pengembangan Web


Modern
Framework telah menjadi elemen penting dalam
pengembangan web modern, mendukung pengembang
dalam menciptakan aplikasi yang lebih efisien,
terstruktur, dan skalabel. Framework adalah kerangka
kerja berupa pustaka (library) yang menyediakan alat,
fungsi, dan struktur standar untuk mempercepat dan
menyederhanakan proses pengembangan aplikasi web.
Dengan memanfaatkan framework, pengembang dapat
fokus pada logika bisnis aplikasi tanpa harus
membangun segala sesuatu dari awal. Dalam
pengembangan web modern, framework memainkan
peran penting dalam meningkatkan produktivitas,
kualitas, dan efisiensi proyek.

18 I Pemrograman Web Framework dengan [Link]


1. Menyediakan Struktur Standar
Framework memberikan struktur standar
dalam pengembangan aplikasi web. Struktur ini
membantu pengembang mengorganisasikan kode
secara rapi, modular, dan mudah di-maintain.
Dengan aturan dan konvensi yang jelas, seperti
dalam Model-View-Controller (MVC) pada
framework seperti Laravel atau Ruby on Rails,
pengembang dapat memisahkan logika bisnis,
antarmuka pengguna, dan pengelolaan data secara
terstruktur. Ini membuat pengembangan proyek
menjadi lebih konsisten, bahkan ketika dilakukan
oleh tim pengembang yang besar.
2. Mempercepat Proses Pengembangan
Framework modern menyediakan berbagai
alat bawaan yang mempercepat proses
pengembangan. Fitur seperti generator kode
otomatis, routing, autentikasi, dan pengelolaan
database membantu menghemat waktu
pengembang dalam menyelesaikan tugas-tugas
dasar. Sebagai contoh, framework seperti Django
pada Python atau Spring pada Java memungkinkan
pengembang membangun aplikasi kompleks dalam

Pemrograman Web Framework dengan [Link] I 19


waktu yang relatif singkat karena banyak fitur
sudah tersedia secara built-in.
3. Meningkatkan Keamanan Aplikasi
Keamanan adalah salah satu aspek kritis
dalam pengembangan web modern. Framework
membantu melindungi aplikasi dari ancaman
umum seperti SQL Injection, Cross-Site Scripting
(XSS), dan Cross-Site Request Forgery (CSRF).
Sebagian besar framework modern seperti
[Link], Laravel, atau [Link] Core dilengkapi
dengan mekanisme keamanan bawaan untuk
mencegah kerentanan ini. Dengan menggunakan
framework, pengembang dapat lebih fokus pada
pengembangan fitur tanpa harus merancang ulang
mekanisme keamanan dari nol.
4. Skalabilitas dalam Pengembangan
Dalam pengembangan web modern,
skalabilitas adalah kebutuhan utama. Framework
mendukung aplikasi untuk menangani
pertumbuhan pengguna atau data yang signifikan.
Framework seperti [Link] dengan arsitektur
event-driven atau React dengan pendekatan
berbasis komponen dirancang untuk mendukung
aplikasi berskala besar. Kemampuan ini penting

20 I Pemrograman Web Framework dengan [Link]


untuk startup atau perusahaan yang
mengantisipasi pertumbuhan pesat dalam
penggunaan aplikasi mereka.
5. Mempermudah Pengelolaan Proyek Tim
Framework juga membantu pengembang
dalam kolaborasi tim. Dengan struktur kode yang
terstandarisasi, setiap anggota tim dapat bekerja
pada bagian aplikasi yang berbeda tanpa
menyebabkan konflik. Misalnya, dalam proyek
berbasis [Link] atau Angular, setiap komponen
antarmuka pengguna dapat dikembangkan secara
independen oleh anggota tim yang berbeda. Selain
itu, dokumentasi yang baik dan komunitas aktif
dari framework memudahkan anggota tim baru
untuk memahami dan berkontribusi pada proyek.
6. Dukungan Komunitas dan Dokumentasi
Framework modern umumnya memiliki
komunitas yang besar dan aktif, serta dokumentasi
yang lengkap. Hal ini memberikan kemudahan bagi
pengembang untuk menemukan solusi jika
menghadapi masalah selama pengembangan.
Contohnya, framework seperti React, Django, dan
Laravel memiliki komunitas global yang selalu
memperbarui fitur, memperbaiki bug, dan berbagi

Pemrograman Web Framework dengan [Link] I 21


tutorial. Komunitas ini membantu memastikan
framework tetap relevan dan mendukung
kebutuhan pengembang modern.
7. Mendukung Teknologi dan Tren Terkini
Framework terus berkembang seiring
dengan tren dan kebutuhan teknologi terbaru.
Framework seperti [Link] dan [Link] mendukung
Server-Side Rendering (SSR) untuk meningkatkan
performa dan optimasi mesin pencari (SEO).
Sementara itu, framework seperti Flutter dan React
Native memungkinkan pengembang membangun
aplikasi lintas platform menggunakan kode yang
sama. Peran framework dalam mengadopsi
teknologi baru ini memastikan pengembang dapat
selalu menghadirkan pengalaman terbaik kepada
pengguna.
8. Mendorong Pengembangan yang Efisien dan
Berkelanjutan
Dengan adanya framework, pengembang
dapat lebih fokus pada logika bisnis aplikasi,
mengurangi potensi kesalahan manusia, dan
meningkatkan efisiensi. Selain itu, framework
modern juga didukung oleh pembaruan rutin yang
memastikan kompatibilitas dengan teknologi

22 I Pemrograman Web Framework dengan [Link]


terbaru. Ini mendukung pengembangan aplikasi
yang berkelanjutan dan relevan di masa depan.
Framework memiliki peran yang sangat penting
dalam pengembangan web modern. Dengan
menyediakan struktur, alat bantu, dan fitur bawaan,
framework mempermudah pengembang untuk
menciptakan aplikasi web yang cepat, aman, dan
berkualitas tinggi. Dari penghematan waktu hingga
peningkatan keamanan, framework telah menjadi
fondasi utama dalam membangun aplikasi yang
memenuhi kebutuhan pengguna dan tuntutan industri
teknologi saat ini. Dalam konteks pengembangan web
modern yang terus berkembang, penggunaan
framework bukan hanya menjadi pilihan, tetapi juga
kebutuhan untuk tetap kompetitif.

Pemrograman Web Framework dengan [Link] I 23


Bab 2 Pengenalan [Link]
A. Apa itu [Link]
[Link] adalah platform perangkat lunak yang
dirancang untuk menjalankan aplikasi berbasis
JavaScript di luar lingkungan browser. Secara umum,
[Link] memungkinkan pengembang untuk
menggunakan JavaScript, yang awalnya hanya
digunakan di sisi klien (client-side), untuk
membangun aplikasi di sisi server (server-side). Hal
ini membuat pengembangan aplikasi full-stack
menjadi lebih sederhana dan efisien, karena
pengembang hanya perlu menguasai satu bahasa
pemrograman. Dibangun di atas mesin V8 JavaScript
Engine milik Google Chrome, [Link] mampu
mengeksekusi kode JavaScript dengan sangat cepat
dan efisien.
Menurut Ryan Dahl, pencipta [Link], platform
ini dirancang untuk mengatasi keterbatasan server
tradisional yang bergantung pada model thread-per-
request. [Link] menggunakan pendekatan event-
driven dan non-blocking I/O, yang berarti sistem dapat
menangani banyak permintaan secara bersamaan
tanpa harus menunggu satu proses selesai sebelum

24 I Pemrograman Web Framework dengan [Link]


melanjutkan ke proses lainnya. Hal ini membuat
[Link] sangat cocok untuk membangun aplikasi
berbasis jaringan, seperti layanan real-time, aplikasi
streaming, dan server API (Demashov & Gosudarev,
2020).
Ahli lain, seperti Andrew Mead dalam bukunya
The Complete [Link] Developer Guide, menyebutkan
bahwa [Link] lebih dari sekadar runtime JavaScript.
Ia adalah ekosistem lengkap dengan pustaka bawaan
(built-in libraries) yang mendukung pengembangan
server, pengelolaan file, komunikasi jaringan, dan
banyak lagi. Dengan pustaka ini, pengembang dapat
membangun aplikasi web yang kompleks tanpa harus
mengandalkan banyak pustaka eksternal, sehingga
mempercepat proses pengembangan.
Menurut Brad Traversy, seorang pengembang
web senior, [Link] telah menjadi pilihan utama dalam
pengembangan aplikasi web modern karena
kecepatan dan skalabilitasnya. Ia menekankan bahwa
[Link] dirancang untuk mendukung aplikasi yang
membutuhkan komunikasi real-time, seperti chat
aplikasi atau notifikasi langsung. Selain itu, arsitektur
single-threaded [Link] dengan manajemen asinkron

Pemrograman Web Framework dengan [Link] I 25


memungkinkan penggunaan sumber daya server
secara lebih efisien.
Pendapat serupa juga diutarakan oleh Douglas
Crockford, seorang ahli JavaScript terkenal, yang
menyebut [Link] sebagai inovasi besar dalam dunia
JavaScript. Ia menjelaskan bahwa [Link]
memungkinkan JavaScript menjadi bahasa yang
serbaguna (versatile), bukan hanya untuk manipulasi
DOM di browser, tetapi juga untuk pengelolaan data,
pembangunan API, dan pengembangan microservices.
Dengan demikian, [Link] memperluas cakupan
penggunaan JavaScript ke berbagai aspek
pengembangan perangkat lunak.
Will Sentance, salah satu pendiri Codesmith,
menyatakan bahwa [Link] memberikan fleksibilitas
yang luar biasa dalam membangun aplikasi berbasis
jaringan. Ia menekankan bahwa arsitektur berbasis
event-loop [Link] adalah salah satu keunggulan
utamanya, memungkinkan pengembang untuk
menangani ribuan koneksi klien secara bersamaan
tanpa memerlukan banyak thread. Hal ini menjadikan
[Link] sebagai pilihan ideal untuk aplikasi berskala
besar.

26 I Pemrograman Web Framework dengan [Link]


Di sisi lain, menurut Ethan Brown, penulis buku
Learning [Link] Development, [Link] adalah alat
yang revolusioner karena memungkinkan
pengembangan aplikasi back-end yang cepat dan
modular. Dengan memanfaatkan pustaka bawaan dan
ekosistem npm (Node Package Manager) yang sangat
besar, pengembang dapat dengan mudah
menambahkan fitur tambahan ke aplikasi mereka.
Brown juga menyoroti bahwa [Link] dirancang untuk
mendukung pengembangan aplikasi lintas platform,
sehingga mempermudah distribusi aplikasi ke
berbagai sistem operasi.
Kesimpulannya, [Link] adalah platform yang
menghadirkan cara baru dalam pengembangan
aplikasi berbasis JavaScript. Dari pengertian umum
hingga pendapat para ahli, [Link] telah terbukti
menjadi alat yang sangat kuat dan fleksibel untuk
membangun aplikasi modern, baik untuk kebutuhan
skala kecil maupun besar. Dengan pendekatan non-
blocking I/O dan ekosistem yang luas, [Link] tidak
hanya memperluas cakupan JavaScript tetapi juga
merevolusi cara pengembang membangun aplikasi
web di era digital saat ini.

Pemrograman Web Framework dengan [Link] I 27


B. Sejarah dan Perkembangan [Link]
[Link] pertama kali diperkenalkan pada tahun
2009 oleh Ryan Dahl, seorang pengembang perangkat
lunak asal Amerika Serikat. Tujuan utama penciptaan
[Link] adalah untuk mengatasi keterbatasan model
pemrograman server tradisional yang sering kali
mengandalkan pendekatan thread-per-request. Saat
itu, sebagian besar server web bekerja dengan cara
memproses setiap permintaan secara terpisah, yang
memerlukan lebih banyak memori dan sering kali
menyebabkan kemacetan saat menangani beban
tinggi. Ryan Dahl ingin menciptakan platform yang
lebih efisien, cepat, dan mampu menangani ribuan
koneksi secara bersamaan tanpa membebani sumber
daya server.
Inspirasi utama di balik [Link] adalah teknologi
V8 JavaScript Engine milik Google, yang dirancang
untuk menjalankan JavaScript dengan performa tinggi
di browser Chrome. Ryan Dahl menyadari bahwa
dengan memanfaatkan mesin ini, JavaScript dapat
digunakan di luar browser untuk membangun aplikasi
sisi server. Selain itu, Dahl juga terinspirasi oleh
pendekatan event-driven yang digunakan dalam
pengembangan sistem jaringan, di mana setiap

28 I Pemrograman Web Framework dengan [Link]


koneksi atau event diproses secara asinkron tanpa
harus menunggu proses lain selesai. Dengan
menggabungkan keduanya, [Link] lahir sebagai
platform server-side berbasis JavaScript yang cepat
dan scalable (Odeniran et al., 2023).
Pada awal pengembangannya, [Link] dirilis
sebagai proyek open-source, yang memungkinkan
pengembang dari seluruh dunia untuk berkontribusi
dalam pengembangan fitur dan penyempurnaan
platform ini. Dalam waktu singkat, [Link] mulai
menarik perhatian komunitas pengembang, terutama
karena kemampuannya dalam menangani I/O
asinkron secara efisien. Platform ini pertama kali
dirilis untuk sistem operasi Linux dan MacOS, sebelum
akhirnya mendukung Windows pada tahun 2011.
Pada tahun 2010, npm (Node Package Manager)
diperkenalkan sebagai alat manajemen pustaka atau
paket untuk [Link]. Kehadiran npm menjadi salah
satu tonggak penting dalam sejarah [Link] karena
memungkinkan pengembang untuk berbagi,
menginstal, dan mengelola pustaka tambahan dengan
mudah. Saat ini, npm adalah salah satu ekosistem
terbesar di dunia pemrograman, dengan lebih dari
satu juta pustaka yang tersedia, menjadikan

Pemrograman Web Framework dengan [Link] I 29


pengembangan aplikasi dengan [Link] semakin cepat
dan fleksibel.
[Link] terus berkembang pesat sejak
diperkenalkan, dengan dukungan yang kuat dari
perusahaan teknologi besar seperti Microsoft,
LinkedIn, dan Netflix. LinkedIn, misalnya, mengganti
seluruh sistem back-end mereka dari Ruby on Rails ke
[Link] karena performa yang lebih baik dalam
menangani permintaan data secara real-time.
Demikian pula, Netflix menggunakan [Link] untuk
mempercepat proses rendering antarmuka pengguna
dan meningkatkan pengalaman streaming.
Pada tahun 2014, pengembangan [Link]
mengalami tantangan besar ketika Ryan Dahl
meninggalkan proyek ini, dan komunitas pengembang
terbagi menjadi dua kelompok. Hal ini memunculkan
fork bernama [Link], yang dikembangkan secara
independen dari [Link]. Namun, pada tahun 2015,
kedua proyek ini berhasil bersatu kembali di bawah
organisasi baru bernama [Link] Foundation, yang
didukung oleh Linux Foundation. Penyatuan ini
membawa stabilitas dan arah baru bagi
pengembangan [Link].

30 I Pemrograman Web Framework dengan [Link]


Seiring waktu, [Link] terus menerima
pembaruan dan peningkatan performa. Salah satu
pembaruan besar adalah implementasi Async/Await
di JavaScript versi ES6, yang disambut baik oleh
pengembang karena menyederhanakan penulisan
kode asinkron. Selain itu, pembaruan terhadap V8
Engine juga memastikan [Link] selalu mendukung
fitur JavaScript terbaru, menjadikannya platform yang
relevan untuk pengembangan modern.
Hingga sekarang, [Link] telah menjadi salah
satu teknologi utama dalam pengembangan web dan
aplikasi, digunakan oleh perusahaan besar maupun
startup di seluruh dunia. Perkembangannya yang
pesat dan komunitas yang aktif memastikan [Link]
tetap menjadi pilihan utama bagi pengembang yang
menginginkan efisiensi, skalabilitas, dan fleksibilitas
dalam membangun aplikasi modern. Dengan latar
belakang sejarah yang kuat dan perkembangan yang
berkelanjutan, [Link] terus memainkan peran
penting dalam evolusi teknologi web dan server-side
(Nielsen et al., 2021).

Pemrograman Web Framework dengan [Link] I 31


C. Mengapa Memilih [Link] untuk Pengembangan
Web?
[Link] telah menjadi salah satu platform favorit
dalam pengembangan web modern karena
keunggulan teknis dan fleksibilitasnya. Berbasis pada
V8 JavaScript Engine, [Link] memungkinkan
pengembang untuk menggunakan JavaScript di sisi
server, sehingga mempercepat pengembangan
aplikasi full-stack. Selain itu, dengan pendekatan
event-driven dan non-blocking I/O, [Link] mampu
menangani beban kerja yang tinggi secara efisien.
Berikut adalah alasan utama mengapa [Link] menjadi
pilihan populer dalam pengembangan web.
1. Kinerja Tinggi Berkat Arsitektur Non-Blocking I/O
[Link] menggunakan arsitektur single-
threaded dengan model non-blocking I/O, yang
membuatnya sangat efisien dalam menangani
banyak permintaan secara bersamaan. Tidak
seperti server tradisional yang memproses setiap
permintaan dalam thread terpisah, [Link]
menggunakan event loop untuk menangani ribuan
koneksi tanpa membebani sumber daya server. Hal
ini membuatnya ideal untuk aplikasi real-time,

32 I Pemrograman Web Framework dengan [Link]


seperti layanan chat, streaming video, dan aplikasi
berbasis API.
2. Penggunaan JavaScript di Sisi Server dan Klien
Salah satu alasan utama memilih [Link]
adalah kemampuannya untuk menggunakan
JavaScript di sisi server dan klien. Ini berarti
pengembang dapat menulis kode backend dan
frontend dalam satu bahasa pemrograman,
sehingga mempermudah koordinasi tim dan
mempercepat pengembangan. Dengan [Link],
pengembang full-stack dapat bekerja secara efisien
tanpa harus mempelajari bahasa tambahan untuk
pengembangan backend.
3. Ekosistem npm yang Sangat Luas
[Link] dilengkapi dengan npm (Node
Package Manager), yang menyediakan akses ke
jutaan pustaka dan modul open-source. Ekosistem
ini memungkinkan pengembang untuk
menambahkan fitur tambahan ke aplikasi mereka
dengan cepat, seperti autentikasi pengguna,
pemrosesan file, atau pengelolaan database.
Keberadaan pustaka ini tidak hanya menghemat
waktu tetapi juga memastikan aplikasi memiliki

Pemrograman Web Framework dengan [Link] I 33


fitur yang kaya tanpa harus membangun semuanya
dari awal.
4. Kemampuan untuk Membangun Aplikasi Real-
Time
[Link] dirancang untuk mendukung
aplikasi real-time secara efisien. Dengan protokol
seperti WebSocket, [Link] memungkinkan
komunikasi dua arah antara server dan klien
secara langsung. Fitur ini sangat penting untuk
aplikasi seperti chat room, game multiplayer
online, dan sistem notifikasi yang membutuhkan
respons cepat dari server.
5. Skalabilitas yang Tinggi
[Link] dirancang untuk menangani aplikasi
berskala besar dengan mudah. Arsitektur event-
driven memungkinkan server untuk menangani
ribuan permintaan secara bersamaan tanpa
membebani memori. Selain itu, [Link] dapat
dengan mudah diskalakan secara horizontal
dengan menambahkan lebih banyak server atau
secara vertikal dengan menambahkan lebih
banyak thread melalui modul bawaan seperti
Cluster Module.

34 I Pemrograman Web Framework dengan [Link]


6. Kompatibilitas dengan Microservices dan Cloud
[Link] sangat cocok untuk membangun
arsitektur microservices, di mana aplikasi besar
dipecah menjadi layanan-layanan kecil yang dapat
diatur secara independen. Pendekatan ini
mempermudah pengelolaan aplikasi yang
kompleks, mempercepat pengembangan fitur baru,
dan meningkatkan skalabilitas. Selain itu, [Link]
sangat kompatibel dengan platform cloud modern,
sehingga mempermudah penyebaran aplikasi ke
layanan cloud seperti AWS, Azure, atau Google
Cloud.
7. Komunitas yang Besar dan Aktif
[Link] memiliki komunitas pengembang
yang sangat aktif dan terus berkembang.
Komunitas ini tidak hanya menyediakan dukungan
teknis melalui forum dan dokumentasi, tetapi juga
secara konsisten memperbarui ekosistem [Link]
dengan pustaka baru, pembaruan keamanan, dan
peningkatan performa. Dengan komunitas yang
besar, pengembang dapat dengan mudah
menemukan solusi untuk masalah teknis dan
memanfaatkan praktik terbaik dalam
pengembangan aplikasi.

Pemrograman Web Framework dengan [Link] I 35


8. Kecepatan dan Efisiensi Pengembangan
[Link] memungkinkan pengembangan
aplikasi dengan cepat karena pendekatannya yang
modular dan dukungan pustaka yang luas. Selain
itu, dengan satu bahasa pemrograman untuk
frontend dan backend, waktu pengembangan
dapat dipangkas secara signifikan. [Link] juga
mendukung pengembangan aplikasi prototipe,
yang memudahkan pengembang untuk membuat
produk minimum viable (MVP) sebelum memulai
pengembangan penuh (REID et al., 2021).
[Link] menawarkan kombinasi unik antara
kinerja tinggi, skalabilitas, dan kemudahan
penggunaan. Dengan kemampuan menangani aplikasi
real-time, ekosistem npm yang kaya, dan dukungan
untuk JavaScript di semua aspek pengembangan,
[Link] menjadi pilihan utama bagi pengembang yang
ingin membangun aplikasi modern, cepat, dan efisien.
Fleksibilitasnya dalam mendukung berbagai
kebutuhan, mulai dari aplikasi kecil hingga sistem
berskala besar, memastikan [Link] tetap relevan di
dunia pengembangan web saat ini.

36 I Pemrograman Web Framework dengan [Link]


D. Arsitektur [Link]
[Link] dirancang dengan arsitektur yang unik,
menjadikannya salah satu platform yang efisien dan
andal untuk pengembangan aplikasi modern. Berbeda
dengan model server tradisional yang mengandalkan
multi-threaded, [Link] menggunakan pendekatan
event-driven dan non-blocking I/O, memungkinkan
server menangani ribuan koneksi secara simultan
tanpa membebani sumber daya. Arsitektur ini sangat
cocok untuk aplikasi real-time dan sistem yang
membutuhkan performa tinggi. Selain itu, [Link]
menerapkan single-threaded model yang
mengoptimalkan penggunaan memori dan CPU,
menjadikannya platform yang sangat scalable dan
hemat biaya. Berikut ini adalah penjelasan lebih rinci
tentang dua elemen kunci arsitektur [Link]: Event-
driven, Non-blocking I/O dan Single-threaded Model
beserta keunggulannya.
Event-driven, Non-blocking I/O
[Link] menggunakan arsitektur event-driven
untuk menangani permintaan (request) secara efisien.
Dalam model ini, setiap permintaan tidak diproses
secara berurutan seperti dalam server tradisional,
melainkan menggunakan mekanisme event loop.

Pemrograman Web Framework dengan [Link] I 37


Ketika server menerima permintaan, [Link] tidak
menunggu hingga proses selesai untuk melanjutkan ke
permintaan berikutnya. Sebaliknya, permintaan
tersebut dilewatkan ke event loop, dan server
langsung menangani tugas lainnya. Setelah tugas
selesai, callback function akan memproses hasilnya.
Pendekatan non-blocking I/O memungkinkan
server [Link] untuk terus bekerja meskipun ada
operasi yang memakan waktu, seperti membaca file
atau berkomunikasi dengan database. Misalnya, jika
ada tugas yang memerlukan waktu lama, seperti
membaca data dari disk, [Link] akan memulai tugas
tersebut secara asinkron dan melanjutkan ke
permintaan lain tanpa terblokir. Hasil tugas akan
diproses saat sudah tersedia, sehingga server tidak
pernah idle.
Arsitektur ini memberikan keunggulan
signifikan, terutama dalam menangani aplikasi dengan
banyak permintaan bersamaan, seperti layanan API
dan aplikasi real-time. Selain itu, model event-driven
mengurangi latensi dan meningkatkan responsivitas
server, menjadikannya ideal untuk aplikasi berbasis
komunikasi seperti chat room, aplikasi streaming, dan
dashboard analitik.

38 I Pemrograman Web Framework dengan [Link]


Keunggulan lainnya adalah efisiensi sumber
daya. Karena [Link] tidak membuat thread baru
untuk setiap permintaan, konsumsi memori dan CPU
dapat diminimalkan, bahkan saat menangani ribuan
koneksi secara bersamaan. Pendekatan ini juga
mempermudah pengelolaan koneksi karena tidak ada
risiko thread contention atau konflik antar-thread
(Chinthanet et al., 2021).
Namun, model ini juga memiliki keterbatasan,
terutama jika digunakan untuk aplikasi yang
membutuhkan proses komputasi berat, seperti
algoritma machine learning atau analisis data yang
kompleks. Meskipun demikian, [Link] tetap unggul
dalam aplikasi I/O-intensif, yang merupakan
mayoritas kebutuhan pengembangan web modern.
Single-threaded Model dan Keunggulannya
[Link] bekerja dengan single-threaded model,
yang berarti semua operasi pada server dijalankan
dalam satu thread utama. Hal ini berbeda dengan
server tradisional yang biasanya menggunakan
pendekatan multi-threaded, di mana setiap
permintaan diproses oleh thread terpisah. Meskipun
terdengar kurang efisien, single-threaded model

Pemrograman Web Framework dengan [Link] I 39


[Link] sangat efektif berkat kombinasi dengan
mekanisme event-driven.
Thread tunggal ini bertanggung jawab untuk
menangani semua operasi, termasuk menerima
permintaan, menjalankan logika aplikasi, dan
mengelola event loop. Karena server tidak membuat
thread baru untuk setiap permintaan, overhead yang
biasanya muncul dalam pengelolaan thread dapat
dihindari. Akibatnya, [Link] mampu menangani
ribuan koneksi bersamaan dengan penggunaan
sumber daya yang lebih rendah dibandingkan dengan
pendekatan multi-threaded.
Keunggulan utama single-threaded model
adalah kesederhanaan pengelolaan kode. Dengan
hanya satu thread yang berjalan, pengembang tidak
perlu khawatir tentang race condition, deadlock, atau
masalah sinkronisasi lainnya yang sering terjadi dalam
aplikasi multi-threaded. Hal ini mempermudah
debugging dan meningkatkan stabilitas aplikasi,
terutama dalam sistem berskala besar.
Meskipun hanya menggunakan satu thread
utama, [Link] memiliki cara untuk menangani tugas-
tugas berat, yaitu dengan worker threads atau child
processes. Modul bawaan seperti Cluster

40 I Pemrograman Web Framework dengan [Link]


memungkinkan [Link] untuk memanfaatkan semua
inti CPU yang tersedia, sehingga meningkatkan
performa untuk aplikasi yang membutuhkan
pemrosesan paralel. Pendekatan ini membuat [Link]
tetap fleksibel dan dapat diskalakan meskipun
berbasis single-threaded.
Namun, pendekatan single-threaded juga
memiliki keterbatasan. Jika aplikasi harus menangani
tugas yang sangat berat di thread utama, seperti
pemrosesan data besar atau algoritma yang kompleks,
event loop dapat terhambat. Hal ini akan mengurangi
performa dan membuat server menjadi tidak
responsif. Oleh karena itu, pengembang harus berhati-
hati dalam merancang aplikasi dengan [Link] untuk
memastikan tugas berat dialihkan ke worker threads
atau layanan eksternal.
Secara keseluruhan, single-threaded model
[Link] menawarkan keseimbangan yang baik antara
efisiensi, skalabilitas, dan kemudahan pengelolaan,
menjadikannya pilihan utama untuk aplikasi modern
berbasis I/O dan real-time.
Arsitektur [Link] yang berbasis event-driven,
non-blocking I/O, dan single-threaded model
merupakan keunggulan utama yang membedakannya

Pemrograman Web Framework dengan [Link] I 41


dari platform server lain. Pendekatan ini
memungkinkan [Link] untuk menangani permintaan
secara efisien, memanfaatkan sumber daya server
secara optimal, dan mengurangi latensi. Meskipun
memiliki keterbatasan dalam menangani tugas
komputasi berat, [Link] tetap menjadi pilihan ideal
untuk aplikasi modern yang membutuhkan
skalabilitas tinggi, seperti API, aplikasi real-time, dan
layanan berbasis cloud.

E. Instalasi [Link] dan Lingkungan Kerja


Sebelum memulai pengembangan
menggunakan [Link], langkah pertama yang harus
dilakukan adalah menginstal [Link] dan menyiapkan
lingkungan kerja yang sesuai. Proses instalasi [Link]
sangat sederhana, namun langkah-langkah yang tepat
harus diikuti agar lingkungan kerja dapat diatur
dengan benar. Dalam bagian ini, kita akan membahas
langkah-langkah instalasi [Link] pada berbagai
platform, pengaturan editor, serta pengujian instalasi
untuk memastikan semuanya berjalan dengan baik.
1. Instalasi [Link] di Sistem Operasi Windows
Untuk menginstal [Link] pada Windows,
pertama, kunjungi situs resmi [Link] di

42 I Pemrograman Web Framework dengan [Link]


[Link] Pilih versi yang sesuai dengan
kebutuhan proyek Anda. Biasanya, disarankan
untuk memilih versi LTS (Long Term Support)
karena stabilitas dan dukungannya yang lebih
lama. Setelah mengunduh installer, ikuti langkah-
langkah berikut:
• Unduh Installer: Klik pada tautan installer yang
tersedia (32-bit atau 64-bit sesuai dengan
arsitektur komputer).
• Jalankan Installer: Klik dua kali pada file yang
sudah diunduh untuk menjalankan proses
instalasi.
• Ikuti Wizard Instalasi: Proses instalasi akan
memandu kita melalui beberapa langkah,
termasuk persetujuan lisensi dan memilih
direktori instalasi. Pastikan untuk mencentang
opsi yang memungkinkan [Link] untuk
menambahkan dirinya ke path sistem.
• Selesai Instalasi: Setelah instalasi selesai, kita
dapat memverifikasi apakah [Link] telah
berhasil diinstal dengan membuka command
prompt dan mengetik perintah node -v untuk
mengecek versi [Link] yang terinstal, serta

Pemrograman Web Framework dengan [Link] I 43


npm -v untuk memastikan bahwa Node
Package Manager (npm) juga telah terinstal.

2. Instalasi [Link] di Sistem Operasi macOS


Di macOS, proses instalasi juga cukup mudah
dan bisa dilakukan menggunakan paket
Homebrew, manajer paket untuk macOS. Berikut
langkah-langkahnya:
• Instalasi Homebrew: Jika belum menginstal
Homebrew, buka terminal dan jalankan
perintah berikut:

/bin/bash -c "$(curl -fsSL


[Link]
rew/install/HEAD/[Link])"

• Instalasi [Link]: Setelah Homebrew terinstal,


Kita dapat menginstal [Link] dengan
menjalankan perintah berikut di terminal:

brew install node

44 I Pemrograman Web Framework dengan [Link]


• Verifikasi Instalasi: Setelah instalasi selesai,
pastikan [Link] terinstal dengan benar dengan
menjalankan perintah node -v dan npm -v di
terminal untuk memeriksa versi masing-
masing.

3. Instalasi [Link] di Sistem Operasi Linux


Di Linux, [Link] dapat diinstal dengan
menggunakan manajer paket distribusi seperti apt
di Ubuntu atau dnf di Fedora. Berikut adalah
contoh instalasi pada sistem berbasis Ubuntu:
• Update Repositori: Pertama, buka terminal dan
jalankan perintah untuk memperbarui
repositori paket:

sudo apt update

• Instalasi [Link]: Instal [Link] dengan


menggunakan perintah berikut:

sudo apt install nodejs


sudo apt install npm

• Verifikasi Instalasi: Setelah selesai, pastikan


[Link] terinstal dengan perintah:

Pemrograman Web Framework dengan [Link] I 45


node -v
npm -v

4. Pengaturan Editor dan IDE untuk [Link]


Setelah [Link] terinstal, langkah
selanjutnya adalah memilih dan mengatur editor
atau IDE (Integrated Development Environment)
yang sesuai untuk menulis kode. Beberapa editor
populer yang mendukung pengembangan dengan
[Link] adalah:
• Visual Studio Code (VSCode): Salah satu editor
paling populer yang memiliki dukungan luar
biasa untuk JavaScript dan [Link]. VSCode
mendukung fitur seperti debugging, linting, dan
integrasi langsung dengan Git. Kita bisa
menginstal [Link] extension untuk
mempercepat pengembangan.
• Sublime Text: Editor teks ringan dan cepat yang
juga mendukung [Link] dengan berbagai
plugin dan package.
• Atom: Editor sumber terbuka yang dapat
dikustomisasi dengan banyak package yang
mendukung [Link] dan JavaScript.

46 I Pemrograman Web Framework dengan [Link]


• Setelah memilih editor, pastikan untuk
menginstal ekstensi atau plugin yang relevan
untuk [Link]. Misalnya, di VSCode, Kita dapat
menginstal ekstensi seperti [Link] Extension
Pack atau ESLint untuk memperbaiki dan
memvalidasi kode JavaScript.
5. Menjalankan Program [Link] Pertama
Setelah lingkungan kerja siap, Kita dapat
mulai membuat aplikasi pertama Anda. Berikut
adalah langkah-langkah untuk menulis dan
menjalankan aplikasi pertama menggunakan
[Link]:
• Buat File JavaScript: Buka editor teks dan buat
file baru dengan nama [Link].
• Tulis Kode Sederhana: Tulis kode berikut dalam
file [Link] untuk membuat server HTTP
sederhana:
const http = require('http');

const server =
[Link]((req, res) => {
[Link] = 200;
[Link]('Content-Type',
'text/plain');
[Link]('Hello, World!');
});

Pemrograman Web Framework dengan [Link] I 47


[Link](3000, '[Link]',
() => {
[Link]('Server running at
[Link]
});

• Jalankan Aplikasi: Simpan file tersebut dan


buka terminal. Arahkan ke direktori tempat file
disimpan, lalu jalankan perintah berikut:

node [Link]

• Cek di Browser: Buka browser dan ketikkan


alamat [Link] Kita akan
melihat pesan "Hello, World!" muncul di
browser, menandakan bahwa server telah
berhasil dijalankan.
6. Manajemen Paket dengan nan
Selain menjalankan aplikasi [Link], Kita
juga akan menggunakan npm (Node Package
Manager) untuk mengelola pustaka dan
dependensi yang digunakan dalam proyek Anda.
Berikut adalah beberapa perintah npm dasar:
• Membuat [Link]: Di dalam folder proyek,
jalankan npm init untuk membuat file

48 I Pemrograman Web Framework dengan [Link]


[Link], yang menyimpan informasi
tentang proyek dan dependensinya.
• Instalasi Pustaka: Untuk menginstal pustaka
pihak ketiga, gunakan perintah npm install
<nama-paket>. Misalnya, untuk menginstal
Express, Kita bisa menjalankan:

npm install express

• Mengelola Dependensi: npm juga


memungkinkan Kita untuk memperbarui atau
menghapus paket dengan perintah seperti npm
update atau npm uninstall.
7. Mengatasi Masalah Instalasi dan Pengujian
Jika mengalami kesulitan saat menginstal
[Link] atau npm, pastikan Kita memeriksa
kembali langkah-langkah instalasi dan mengecek
apakah path sistem sudah terkonfigurasi dengan
benar. Kita juga bisa mencoba menginstal ulang
atau memperbarui [Link] dan npm ke versi
terbaru. Untuk membantu troubleshooting, Kita
bisa memeriksa dokumentasi resmi di [Link]
Documentation (Huang, 2020).

Pemrograman Web Framework dengan [Link] I 49


Instalasi [Link] dan penyiapan lingkungan
kerja merupakan langkah penting untuk memulai
pengembangan aplikasi web menggunakan
platform ini. Proses instalasi dapat disesuaikan
dengan sistem operasi yang digunakan, dan editor
seperti VSCode akan membantu dalam
pengembangan. Setelah pengaturan selesai,
pengembang dapat langsung membuat aplikasi
pertama mereka dan mengelola pustaka
menggunakan npm. Dengan [Link],
pengembangan aplikasi web menjadi lebih cepat
dan efisien, terutama untuk aplikasi berbasis I/O
dan real-time (Herron, 2020).

F. NPM (Node Package Manager)


Node Package Manager (NPM) adalah alat yang
sangat penting dalam pengembangan aplikasi
menggunakan [Link]. NPM berfungsi sebagai manajer
paket yang memungkinkan pengembang untuk
mengelola dependensi, pustaka, dan alat tambahan
yang digunakan dalam proyek mereka. NPM
memberikan cara yang sangat efisien untuk
menginstal, memperbarui, dan menghapus paket
JavaScript yang digunakan dalam aplikasi. Dalam

50 I Pemrograman Web Framework dengan [Link]


bagian ini, kita akan membahas pengertian NPM, cara
kerjanya, dan fungsinya dalam pengembangan [Link].
NPM adalah sistem manajemen paket default
untuk [Link]. Sejak [Link] pertama kali dirilis, NPM
telah menjadi bagian integral dari ekosistem
JavaScript, menyediakan pengembang dengan cara
yang mudah untuk mengelola dan berbagi pustaka
kode dengan pengembang lain. NPM memungkinkan
pengembang untuk menginstal pustaka eksternal yang
dibutuhkan untuk proyek mereka, baik itu untuk
server-side atau client-side, seperti [Link],
MongoDB driver, dan banyak lainnya.
Setiap proyek yang menggunakan NPM biasanya
memiliki file bernama [Link], yang menyimpan
metadata proyek, termasuk nama proyek, versi, skrip,
dan dependensi yang diperlukan. File [Link] ini
berfungsi sebagai dasar untuk mengelola paket dan
dependensi dalam proyek [Link]. NPM akan
mengunduh dan mengelola paket yang tercatat dalam
file ini secara otomatis.
NPM bekerja dengan dua komponen utama:
registry dan CLI (Command Line Interface). NPM
registry adalah repositori publik yang berisi ratusan
ribu paket yang dapat diunduh dan digunakan oleh

Pemrograman Web Framework dengan [Link] I 51


pengembang. Setiap kali menginstal sebuah paket
menggunakan perintah seperti npm install <package-
name>, NPM akan menghubungi registry ini untuk
mengunduh paket yang diminta.
NPM CLI, di sisi lain, adalah alat baris perintah
yang digunakan untuk mengelola paket dalam proyek.
Dengan menggunakan perintah-perintah ini,
pengembang dapat menambahkan, menghapus,
memperbarui, dan mencari paket di dalam proyek
mereka. NPM juga memungkinkan pengembang untuk
menjalankan skrip khusus, seperti npm start, yang
menjalankan aplikasi [Link].
Salah satu fitur utama NPM adalah
kemampuannya untuk menginstal paket eksternal ke
dalam proyek Anda. Pengembang dapat menginstal
pustaka dan dependensi yang mereka butuhkan hanya
dengan menjalankan perintah npm install <package-
name>. Misalnya, jika kita ingin menggunakan
framework [Link] untuk aplikasi server, kita hanya
perlu menjalankan:

npm install express

52 I Pemrograman Web Framework dengan [Link]


NPM akan mengunduh dan menginstal versi
terbaru [Link] serta semua dependensi yang
diperlukan untuk menjalankannya.
Selain itu, NPM memungkinkan pengembang
untuk mengelola versi dari setiap paket yang diinstal.
Dalam file [Link], kita akan menemukan bagian
yang menyatakan versi yang digunakan dalam proyek,
yang membantu menghindari konflik atau
ketidaksesuaian antara dependensi proyek.
NPM juga mendukung skrip yang
memungkinkan pengembang untuk mendefinisikan
perintah khusus dalam file [Link] dan
menjalankannya melalui perintah npm run. Skrip ini
sangat berguna dalam otomatisasi tugas-tugas seperti
pengujian unit, pengemasan aplikasi, atau
menjalankan server pengembangan.
Contoh sederhana penggunaan skrip adalah
sebagai berikut. Kita dapat menambahkan skrip start
dalam [Link] untuk menjalankan aplikasi
[Link] dengan perintah:
"scripts": {
"start": "node [Link]"
}

Pemrograman Web Framework dengan [Link] I 53


Setelah itu, kita dapat menjalankan aplikasi
dengan perintah:

npm start

Ini akan menjalankan perintah node [Link] yang


telah didefinisikan di dalam skrip. Skrip NPM sangat
bermanfaat dalam menjaga kode lebih terstruktur dan
otomatis.
Keuntungan utama dari NPM adalah kemudahan
dalam berbagi dan mengelola kode. NPM menyediakan
sistem yang memungkinkan pengembang untuk
dengan cepat menambahkan pustaka dan alat baru ke
proyek mereka tanpa harus menulis semuanya dari
awal. Selain itu, dengan menggunakan NPM,
pengembang dapat memastikan bahwa proyek mereka
tetap konsisten di berbagai lingkungan
pengembangan, karena dependensi yang diperlukan
selalu terdefinisi dalam file [Link].
Selain itu, NPM mendukung manajemen versi
yang memungkinkan pengembang untuk mengontrol
versi paket yang mereka gunakan. Hal ini sangat
penting dalam mencegah masalah ketergantungan
yang dapat menyebabkan kegagalan aplikasi.

54 I Pemrograman Web Framework dengan [Link]


Penggunaan NPM juga memungkinkan kolaborasi
lebih mudah dalam tim pengembang, karena semua
anggota tim dapat menggunakan paket yang sama
dengan cara yang konsisten.
NPM juga memungkinkan pengembang untuk
mengelola pembaruan paket dengan cara yang sangat
fleksibel. Dengan perintah npm update, NPM akan
memeriksa versi terbaru dari paket yang diinstal dan
memperbaruinya jika diperlukan. Pembaruan ini
penting untuk menjaga agar aplikasi tetap aman dan
mengikuti perkembangan terbaru dari paket yang
digunakan.
Namun, meskipun NPM memungkinkan
pembaruan paket, penting bagi pengembang untuk
memverifikasi bahwa pembaruan tersebut tidak
menyebabkan ketidaksesuaian dalam aplikasi. Oleh
karena itu, pengujian harus dilakukan secara
menyeluruh setiap kali paket diperbarui.
Selain sebagai alat pengelola paket, NPM juga
memungkinkan pengembang untuk membuat dan
membagikan paket mereka sendiri. Pengembang
dapat membuat pustaka JavaScript mereka sendiri,
mengemasnya dengan benar, dan

Pemrograman Web Framework dengan [Link] I 55


mempublikasikannya ke NPM registry menggunakan
perintah:

npm publish

Ini memungkinkan pustaka atau modul yang


dibuat oleh pengembang untuk diakses oleh
komunitas [Link] dan digunakan dalam proyek
lainnya. Dengan cara ini, NPM menjadi lebih dari
sekadar manajer paket, tetapi juga merupakan
platform kolaboratif yang mendukung pengembangan
perangkat lunak terbuka.
NPM adalah salah satu alat paling penting dalam
ekosistem [Link], memberikan pengembang
kemampuan untuk mengelola dependensi, berbagi
pustaka, dan menyederhanakan pengelolaan proyek.
Dengan menyediakan cara yang efisien untuk
menginstal, memperbarui, dan mengelola paket
JavaScript, NPM memungkinkan pengembang untuk
fokus pada pengembangan aplikasi tanpa harus
khawatir tentang manajemen kode dan dependensi.
Melalui skrip dan kemampuan publikasi paket, NPM
juga mempercepat pengembangan dan kolaborasi
dalam proyek-proyek [Link].

56 I Pemrograman Web Framework dengan [Link]


Bab 3: Dasar-Dasar
JavaScript pada [Link]
A. Pengantar JavaScript di Lingkungan Server
JavaScript awalnya dikenal sebagai bahasa
pemrograman untuk pengembangan antarmuka
pengguna di sisi klien (client-side), yang menjalankan
kode di dalam browser pengguna. Namun, dengan
perkembangan teknologi, JavaScript tidak lagi terbatas
pada browser. Penggunaan JavaScript di lingkungan
server menjadi terobosan besar yang mengubah cara
aplikasi web dibangun. Kemajuan ini memungkinkan
JavaScript tidak hanya mengendalikan antarmuka
pengguna tetapi juga menangani logika backend,
proses server, dan pengelolaan database, sehingga
menciptakan pendekatan pengembangan aplikasi
yang lebih efisien dan seragam.
Pergeseran JavaScript ke lingkungan server
dimulai dengan lahirnya [Link] pada tahun 2009 oleh
Ryan Dahl. [Link] adalah runtime JavaScript yang
memungkinkan pengembang untuk menjalankan
JavaScript di luar browser, khususnya di server.
Dengan menggunakan mesin V8 milik Google Chrome,

Pemrograman Web Framework dengan [Link] I 57


[Link] menawarkan performa tinggi dan kemampuan
pemrosesan yang lebih cepat. Penggunaannya
semakin populer karena pendekatan berbasis event-
driven dan non-blocking I/O, yang sangat efisien untuk
menangani permintaan dalam jumlah besar secara
bersamaan. Hal ini menjadikan JavaScript sebagai
bahasa pemrograman full-stack yang dapat digunakan
baik di sisi klien maupun server.
Sebelum munculnya [Link], pengembangan
server-side biasanya dilakukan menggunakan bahasa
seperti PHP, Ruby, atau Python. Meskipun bahasa-
bahasa tersebut masih sangat relevan, JavaScript
melalui [Link] menawarkan beberapa keunggulan
yang signifikan. Salah satunya adalah kemudahan
penggunaan bahasa yang sama untuk seluruh stack
pengembangan, sehingga memungkinkan
pengembang untuk bekerja lebih cepat tanpa perlu
mempelajari banyak bahasa. Hal ini juga
meningkatkan kolaborasi tim pengembang karena
semua pihak berbicara "bahasa" yang sama (Amirulloh
et al., 2024).
Penggunaan JavaScript di sisi server membawa
perubahan besar dalam arsitektur pengembangan web
modern. Framework seperti [Link], yang dibangun

58 I Pemrograman Web Framework dengan [Link]


di atas [Link], memberikan kerangka kerja yang
ringan namun kuat untuk membuat aplikasi web dan
API. Dengan dukungan komunitas yang besar dan
ekosistem yang terus berkembang, JavaScript di server
kini mampu menangani berbagai kebutuhan aplikasi,
mulai dari aplikasi kecil hingga sistem berskala besar
seperti platform streaming, e-commerce, dan media
sosial.
Salah satu alasan utama JavaScript di lingkungan
server menjadi sangat populer adalah fleksibilitasnya.
[Link] mendukung berbagai sistem operasi seperti
Windows, macOS, dan Linux, sehingga pengembang
dapat menjalankan server mereka di berbagai
platform. Selain itu, arsitektur berbasis modul yang
dimiliki [Link], yang dikelola melalui NPM (Node
Package Manager), memungkinkan pengembang
untuk dengan mudah menambahkan fitur tambahan
ke dalam aplikasi mereka, seperti otentikasi pengguna,
koneksi database, dan integrasi API pihak ketiga.
JavaScript di server juga sangat cocok untuk
aplikasi berbasis waktu nyata (real-time), seperti
aplikasi obrolan, game multiplayer, dan sistem
notifikasi. Pendekatan event-driven yang dimiliki
[Link] membuatnya sangat ideal untuk aplikasi

Pemrograman Web Framework dengan [Link] I 59


semacam itu karena dapat menangani ribuan koneksi
secara bersamaan tanpa memblokir proses. Ini adalah
keunggulan signifikan dibandingkan dengan model
server tradisional yang sering kali memerlukan
banyak sumber daya untuk setiap koneksi klien.
Selain itu, JavaScript di lingkungan server
memberikan efisiensi dalam pengembangan prototipe
dan iterasi cepat. Karena JavaScript memiliki sintaks
yang sederhana dan ekosistem yang kaya,
pengembang dapat dengan cepat membangun
prototipe aplikasi dan mengujinya di lingkungan
server. Hal ini memungkinkan proses pengembangan
yang lebih iteratif, yang pada akhirnya menghasilkan
produk yang lebih baik dalam waktu yang lebih
singkat.
Penggunaan JavaScript di lingkungan server
telah merevolusi dunia pengembangan aplikasi web.
Dari sekadar bahasa scripting sederhana di browser,
JavaScript kini menjadi alat yang kuat dan fleksibel
yang mampu mendukung pengembangan full-stack.
Dengan dukungan komunitas yang luas, dokumentasi
yang kaya, dan ekosistem yang terus berkembang,
JavaScript di server terus menjadi pilihan utama

60 I Pemrograman Web Framework dengan [Link]


pengembang untuk menciptakan aplikasi yang cepat,
skalabel, dan efisien.

B. Variabel, Tipe Data, dan Operator


Variabel, tipe data, dan operator merupakan
elemen dasar dalam pemrograman, termasuk dalam
pengembangan menggunakan JavaScript. Variabel
adalah tempat penyimpanan data yang dapat berubah
selama eksekusi program. Tipe data menentukan jenis
nilai yang dapat disimpan dalam variabel, sementara
operator digunakan untuk melakukan operasi pada
nilai-nilai tersebut. Pemahaman ketiga elemen ini
sangat penting karena menjadi fondasi dalam
membangun logika program dan
mengimplementasikan berbagai fitur dalam aplikasi.
1. Variabel dalam JavaScript
Variabel adalah wadah yang digunakan
untuk menyimpan data. Dalam JavaScript, variabel
dapat dideklarasikan menggunakan kata kunci var,
let, atau const. Masing-masing memiliki
karakteristik yang berbeda. var digunakan pada
versi JavaScript yang lebih lama, namun sering
digantikan oleh let dan const dalam praktik

Pemrograman Web Framework dengan [Link] I 61


modern karena keunggulan dalam hal ruang
lingkup (scope) dan pengelolaan memori.
• let memungkinkan pengembang untuk
mendeklarasikan variabel yang nilainya dapat
diubah, dengan lingkup blok.
• const, sesuai namanya, digunakan untuk
mendeklarasikan variabel yang nilainya tidak
dapat diubah setelah ditetapkan. Misalnya:

let age = 25; // Variabel yang nilainya


bisa diubah
const PI = 3.14; // Variabel dengan nilai
tetap

Variabel adalah alat fleksibel untuk


menyimpan berbagai jenis data yang dibutuhkan
dalam program, mulai dari angka hingga objek
kompleks.

2. Tipe Data dalam JavaScript


Tipe data adalah kategori yang menentukan
jenis nilai yang dapat disimpan dalam variabel.
JavaScript memiliki dua jenis tipe data utama, yaitu
primitive dan non-primitive.

62 I Pemrograman Web Framework dengan [Link]


a. Tipe data primitif mencakup:
• Number: Angka, termasuk bilangan
desimal. Contoh: 10, 3.14.
• String: Teks yang diapit tanda kutip.
Contoh: "Hello", 'World'.
• Boolean: Nilai logis true atau false.
• Undefined: Variabel yang dideklarasikan
tetapi belum diberi nilai.
• Null: Nilai kosong yang ditetapkan secara
eksplisit.
• Symbol: Digunakan untuk membuat
identifier yang unik.
b. Tipe data non-primitif mencakup:
• Object: Struktur data yang lebih
kompleks, seperti array atau objek.
Setiap tipe data memiliki peran spesifik
dalam aplikasi. Misalnya, tipe Number digunakan
untuk perhitungan, sementara String digunakan
untuk manipulasi teks.

3. Operator dalam JavaScript


Operator adalah simbol atau kata kunci yang
digunakan untuk melakukan operasi pada variabel

Pemrograman Web Framework dengan [Link] I 63


atau nilai. JavaScript mendukung berbagai jenis
operator, termasuk:
• Operator aritmatika: Digunakan untuk
perhitungan matematis, seperti +, -, *, dan /.
Contoh:
let sum = 10 + 5; // Hasil: 15

• Operator perbandingan: Digunakan untuk


membandingkan dua nilai, seperti ==, ===, <, >.
Contoh:
[Link](10 > 5); // Hasil: true

• Operator logika: Digunakan untuk operasi logis,


seperti && (AND), || (OR), dan ! (NOT). Contoh:

[Link](true && false); // Hasil:


false

• Operator assignment: Digunakan untuk


menetapkan nilai ke variabel, seperti = atau +=.

Dengan kombinasi operator ini, pengembang


dapat menciptakan logika kompleks dalam program.

64 I Pemrograman Web Framework dengan [Link]


Lingkup variabel menentukan di mana variabel
dapat diakses dalam program. Ada tiga jenis lingkup
dalam JavaScript:
• Global scope: Variabel yang dideklarasikan di luar
blok atau fungsi dapat diakses di mana saja dalam
program.
• Function scope: Variabel yang dideklarasikan di
dalam fungsi hanya dapat diakses di dalam fungsi
tersebut.
• Block scope: Dengan let dan const, variabel hanya
dapat diakses di dalam blok tempat variabel
tersebut dideklarasikan.
Lingkup ini penting untuk menghindari konflik
nama variabel dan memastikan kode tetap
terorganisir.
5. Konsep Hoisting dan Dinamisnya JavaScript
Salah satu konsep unik dalam JavaScript adalah
hoisting, di mana deklarasi variabel diangkat ke bagian
atas ruang lingkupnya selama proses eksekusi. Namun,
hanya deklarasi yang diangkat, bukan nilainya.
Contoh:
[Link](a); // undefined
var a = 5;

Pemrograman Web Framework dengan [Link] I 65


JavaScript juga merupakan bahasa yang loosely
typed dan dinamis. Ini berarti tipe data variabel dapat
berubah selama program berjalan:

let x = 10; // Number


x = "Hello"; // String

Fleksibilitas ini membuat JavaScript mudah


digunakan tetapi juga menuntut pengembang untuk
berhati-hati agar tidak menciptakan bug.
Variabel, tipe data, dan operator adalah
komponen fundamental dalam JavaScript. Memahami
cara kerja variabel serta penggunaannya bersama tipe
data dan operator memungkinkan pengembang untuk
membangun logika program yang kuat. Dengan fitur
seperti berbagai jenis tipe data, dukungan untuk
operator kompleks, dan fleksibilitas variabel,
JavaScript menjadi salah satu bahasa pemrograman
paling populer untuk pengembangan aplikasi modern.

C. Struktur Kontrol dan Fungsi


Struktur kontrol dan fungsi adalah elemen
mendasar dalam JavaScript yang memungkinkan
pengembang untuk mengatur alur eksekusi program
dan membangun logika yang kompleks. Struktur

66 I Pemrograman Web Framework dengan [Link]


kontrol menentukan bagaimana suatu blok kode
dijalankan berdasarkan kondisi tertentu atau berulang
sesuai kebutuhan. Fungsi, di sisi lain, adalah blok kode
yang dirancang untuk melaksanakan tugas tertentu
dan dapat digunakan kembali di berbagai bagian
program. Keduanya saling melengkapi dalam
menciptakan program yang dinamis, modular, dan
efisien.
Struktur kontrol mencakup pernyataan
kondisional seperti if, else if, dan else. Pernyataan ini
memungkinkan program untuk mengeksekusi kode
tertentu hanya jika kondisi tertentu terpenuhi.
Misalnya, if (x > 10) berarti program akan memeriksa
apakah nilai x lebih besar dari 10 dan, jika benar, akan
menjalankan kode di dalam blok if. Untuk menangani
banyak kondisi secara lebih terorganisir, JavaScript
juga menyediakan pernyataan switch, yang berguna
ketika ada beberapa kasus yang perlu diuji
berdasarkan nilai tertentu.
Selain pernyataan kondisional, struktur kontrol
mencakup pernyataan perulangan seperti for, while,
dan do...while. Perulangan memungkinkan program
untuk menjalankan blok kode berulang kali selama
kondisi tertentu terpenuhi. Contohnya, pernyataan for

Pemrograman Web Framework dengan [Link] I 67


sering digunakan untuk mengulang blok kode dengan
jumlah iterasi yang diketahui, sementara while
digunakan untuk kondisi yang terus berubah. Struktur
ini sangat membantu dalam menghindari pengulangan
manual kode, meningkatkan efisiensi, dan menjaga
program tetap rapi.
Fungsi dalam JavaScript adalah blok kode yang
dapat dipanggil kapan saja untuk melakukan tugas
tertentu. Fungsi memungkinkan pengembang untuk
memecah program menjadi bagian-bagian kecil yang
lebih terorganisir dan mudah dipahami. Dengan
mendeklarasikan fungsi menggunakan kata kunci
function atau menggunakan sintaks modern seperti
arrow function (=>), pengembang dapat membuat
kode yang lebih ringkas dan elegan. Fungsi juga
mendukung parameter, sehingga data dapat
diteruskan ke dalam fungsi untuk diolah.
Fungsi memiliki fleksibilitas tinggi karena
mendukung nilai kembalian (return value). Nilai ini
memungkinkan fungsi untuk memberikan hasil yang
dapat digunakan kembali dalam program. Misalnya,
sebuah fungsi matematika seperti function add(a, b) {
return a + b; } dapat menghitung penjumlahan dua
angka dan mengembalikan hasilnya. Penggunaan nilai

68 I Pemrograman Web Framework dengan [Link]


kembali ini sangat membantu dalam menciptakan alur
logika yang kompleks dengan kode yang lebih
sederhana dan modular.
Selain fungsi biasa, JavaScript mendukung
fungsi anonim yang tidak memiliki nama dan biasanya
digunakan sebagai argumen dalam fungsi lain. Fungsi
anonim sering digunakan dalam operasi callback,
seperti menangani event atau mengolah data asinkron.
Sebagai contoh, fungsi anonim digunakan dalam
metode setTimeout untuk menunda eksekusi kode
tertentu:
setTimeout(function() { [Link]("Hello,
World!"); }, 1000);

Struktur kontrol dan fungsi memiliki hubungan


erat dalam pengembangan aplikasi. Struktur kontrol
memastikan logika program dapat dijalankan dengan
kondisi atau pola tertentu, sementara fungsi
memungkinkan pengembang membangun kode yang
dapat digunakan kembali dan terorganisir. Keduanya
memungkinkan pengembang untuk mengurangi
pengulangan kode, membuat program lebih modular,
dan meningkatkan keterbacaan (Setiawan et al., 2024).

Pemrograman Web Framework dengan [Link] I 69


Dengan memahami dan menguasai struktur
kontrol serta fungsi, pengembang dapat menulis
program yang lebih efisien dan mudah dipelihara.
Kedua elemen ini memberikan fondasi kuat dalam
pengembangan aplikasi modern menggunakan
JavaScript, baik di sisi klien (client-side) maupun
server (server-side).

D. Asynchronous Programming pada [Link]


Asynchronous programming adalah salah satu
fitur utama yang membuat [Link] sangat unggul
dalam pengembangan aplikasi web modern. Secara
sederhana, pemrograman asinkron memungkinkan
tugas atau operasi berjalan tanpa harus menunggu
operasi sebelumnya selesai, sehingga meningkatkan
efisiensi dan responsivitas program. Dalam konteks
[Link], pemrograman asinkron sangat penting karena
[Link] dirancang untuk menangani banyak
permintaan secara bersamaan dengan model non-
blocking I/O.
[Link] menggunakan pendekatan asinkron
berbasis event-driven, di mana setiap tugas atau
operasi, seperti membaca file atau memproses
permintaan HTTP, diatur dalam bentuk event. Ketika

70 I Pemrograman Web Framework dengan [Link]


sebuah event selesai diproses, [Link] akan
menjalankan fungsi callback yang sesuai tanpa
menunggu tugas lain selesai. Ini memungkinkan
[Link] untuk menangani ribuan koneksi secara
bersamaan tanpa harus memblokir proses lainnya.
Sebagai contoh:

const fs = require('fs');
[Link]('[Link]', 'utf8', (err,
data) => {
if (err) throw err;
[Link](data);
});
[Link]("File sedang dibaca...");

Dalam contoh ini, [Link] membaca file secara


asinkron. Sementara file sedang diproses, kode lain
tetap bisa berjalan, seperti mencetak pesan “File
sedang dibaca...”.
Salah satu mekanisme utama untuk menangani
pemrograman asinkron di [Link] adalah callback.
Callback adalah fungsi yang dieksekusi setelah operasi
asinkron selesai. Namun, penggunaan callback sering
kali menyebabkan apa yang disebut callback hell, yaitu

Pemrograman Web Framework dengan [Link] I 71


struktur kode yang sulit dibaca dan dipelihara ketika
banyak callback bersarang. Untuk mengatasi hal ini,
[Link] mendukung mekanisme lain seperti Promises
dan async/await, yang lebih modern dan membuat
kode lebih bersih serta mudah dipahami.
Promises adalah objek yang mewakili
penyelesaian atau kegagalan operasi asinkron. Dengan
Promises, pengembang dapat mengelola alur asinkron
tanpa harus menggunakan banyak callback. Contoh
penggunaannya adalah dengan metode .then() dan
.catch() untuk menangani hasil atau kesalahan:

const fs = require('fs').promises;

[Link]('[Link]', 'utf8')
.then(data => [Link](data))
.catch(err => [Link](err));
Pendekatan ini lebih terstruktur dan membantu
mengurangi kompleksitas kode dibandingkan dengan
callback tradisional.
Pada JavaScript versi modern, [Link] juga
mendukung penggunaan async/await, yang
merupakan cara paling elegan untuk menangani
operasi asinkron. Dengan async/await, kode asinkron

72 I Pemrograman Web Framework dengan [Link]


dapat ditulis dengan gaya yang menyerupai kode
sinkron, sehingga lebih mudah dimengerti. Contoh:

const fs = require('fs').promises;

async function readFile() {


try {
const data = await
[Link]('[Link]', 'utf8');
[Link](data);
} catch (err) {
[Link](err);
}
}

readFile();

Kode di atas lebih intuitif dibandingkan dengan


menggunakan callback atau Promises, terutama ketika
ada banyak operasi asinkron yang harus dijalankan
secara berurutan (MASKANDAR, 2024).
Pemrograman asinkron juga sangat penting
dalam aplikasi berbasis web yang membutuhkan
skalabilitas tinggi. Dengan model asinkron, [Link]
dapat menangani ribuan koneksi bersamaan tanpa

Pemrograman Web Framework dengan [Link] I 73


memerlukan banyak sumber daya, berbeda dengan
pendekatan thread-per-request pada server
tradisional. Hal ini menjadikan [Link] pilihan utama
untuk membangun aplikasi real-time seperti chat
applications, API yang skalabel, dan platform
streaming.
Secara keseluruhan, asynchronous
programming di [Link] merupakan fitur utama yang
mendukung performa tinggi dalam pengembangan
aplikasi. Dengan memahami mekanisme seperti
callback, Promises, dan async/await, pengembang
dapat memanfaatkan kekuatan penuh [Link] untuk
membangun aplikasi yang efisien, cepat, dan skalabel.

E. Callback, Promise, dan Async/Await


Pemrograman asinkron dalam [Link]
mengandalkan tiga mekanisme utama: callback,
Promise, dan async/await. Ketiganya memungkinkan
pengembang untuk menangani tugas-tugas yang
memerlukan waktu, seperti membaca file, permintaan
HTTP, atau operasi basis data, tanpa harus memblokir
eksekusi program. Pemahaman yang baik tentang
ketiga konsep ini sangat penting untuk membangun
aplikasi yang efisien dan responsif.

74 I Pemrograman Web Framework dengan [Link]


Callback adalah cara pertama dan paling dasar
untuk menangani operasi asinkron di [Link]. Callback
adalah fungsi yang dilewatkan sebagai argumen ke
fungsi lain, yang akan dieksekusi setelah tugas selesai.
Misalnya, saat membaca file, fungsi callback dipanggil
setelah file selesai dibaca:

const fs = require('fs');

[Link]('[Link]', 'utf8', (err,


data) => {
if (err) throw err;
[Link](data);
});
Dalam contoh ini, fungsi callback menerima dua
parameter: err untuk menangani kesalahan dan data
untuk hasil operasi. Meskipun sederhana, penggunaan
callback yang berlebihan dapat menyebabkan struktur
kode yang sulit dibaca, dikenal sebagai callback hell,
terutama jika ada banyak tugas bersarang.
Untuk mengatasi keterbatasan callback,
Promise diperkenalkan sebagai solusi yang lebih
terstruktur. Promise adalah objek yang mewakili
penyelesaian atau kegagalan suatu operasi asinkron.

Pemrograman Web Framework dengan [Link] I 75


Promise memiliki tiga status: pending (sedang
berjalan), fulfilled (berhasil), dan rejected (gagal).
Dengan menggunakan metode .then() untuk
menangani keberhasilan dan .catch() untuk
menangani kesalahan, Promise membuat kode lebih
mudah diikuti:

const fs = require('fs').promises;

[Link]('[Link]', 'utf8')
.then(data => [Link](data))
.catch(err => [Link](err));
Promise mengurangi kompleksitas kode dan
membuat alur asinkron lebih mudah dipahami
dibandingkan callback bersarang.
Pendekatan yang lebih modern adalah
async/await, yang diperkenalkan dalam JavaScript ES8
(ECMAScript 2017). Async/await dibangun di atas
Promise tetapi memungkinkan penulisan kode
asinkron dengan gaya sinkron. Dengan menggunakan
kata kunci async untuk mendeklarasikan fungsi dan
await untuk menunggu penyelesaian Promise, kode
menjadi lebih bersih dan mudah dibaca:

76 I Pemrograman Web Framework dengan [Link]


const fs = require('fs').promises;

async function readFile() {


try {
const data = await
[Link]('[Link]', 'utf8');
[Link](data);
} catch (err) {
[Link](err);
}
}

readFile();
Pendekatan ini sangat cocok untuk menangani
alur asinkron yang kompleks, seperti operasi berantai
atau ketika harus menangani kesalahan pada beberapa
tahap.
Setiap mekanisme memiliki kelebihan dan
penggunaannya masing-masing. Callback cocok untuk
tugas sederhana tetapi menjadi sulit dikelola saat
tugas bertambah banyak. Promise menawarkan
struktur yang lebih baik untuk tugas-tugas yang
memerlukan alur berantai. Sementara itu, async/await
adalah pendekatan yang paling modern dan intuitif,

Pemrograman Web Framework dengan [Link] I 77


membuat pengembangan lebih efisien dan mudah
dipahami, terutama dalam proyek besar.
Selain itu, kombinasi Promise dan async/await
sering digunakan untuk menangani tugas-tugas
asinkron paralel. Dengan metode seperti [Link](),
beberapa Promise dapat dijalankan secara bersamaan,
mempercepat eksekusi program:

async function readFiles() {


try {
const [file1, file2] = await
[Link]([
[Link]('[Link]',
'utf8'),
[Link]('[Link]',
'utf8')
]);
[Link](file1, file2);
} catch (err) {
[Link](err);
}
}
readFiles();

78 I Pemrograman Web Framework dengan [Link]


Dalam contoh ini, kedua file dibaca secara
paralel, menghemat waktu dibandingkan
membacanya secara berurutan.
Dengan memahami callback, Promise, dan
async/await, pengembang dapat memilih pendekatan
terbaik untuk kebutuhan mereka. Ketiga konsep ini
membentuk fondasi pemrograman asinkron di
[Link], memungkinkan pengembangan aplikasi yang
cepat, responsif, dan mudah dipelihara.

Pemrograman Web Framework dengan [Link] I 79


Bab 4: Membuat API REST
dengan [Link]
A. Konsep API REST
Representational State Transfer (REST) adalah
sebuah arsitektur yang digunakan untuk membangun
Application Programming Interface (API) yang
sederhana, fleksibel, dan berbasis protokol HTTP.
REST memungkinkan komunikasi antara klien
(misalnya aplikasi frontend) dan server dengan
menggunakan standar HTTP. Dalam konteks
pengembangan web, API REST banyak digunakan
untuk membangun sistem yang skalabel dan mudah
diintegrasikan dengan berbagai aplikasi.
REST didasarkan pada beberapa prinsip utama,
seperti statelessness (tidak menyimpan status antara
permintaan), resource-based (setiap sumber daya
memiliki representasi yang unik), dan penggunaan
metode HTTP untuk operasi CRUD (Create, Read,
Update, Delete). API REST mengandalkan URL untuk
merepresentasikan sumber daya dan HTTP Methods
untuk operasi yang ingin dilakukan.

80 I Pemrograman Web Framework dengan [Link]


HTTP Methods (GET, POST, PUT, DELETE)
HTTP Methods adalah inti dari API REST. Setiap
metode memiliki fungsi spesifik untuk mengelola
sumber daya:
• GET: Digunakan untuk mengambil atau membaca
data dari server. Operasi ini tidak mengubah data
di server, sehingga bersifat safe dan idempotent.
Contoh:
GET /api/Products

Permintaan ini akan mengembalikan daftar


produk.

• POST: Digunakan untuk membuat sumber daya


baru di server. Data yang dikirimkan biasanya
berada dalam format JSON atau XML di dalam body
permintaan. Contoh:

POST /api/products

Permintaan ini akan membuat produk baru


berdasarkan data yang dikirim.

Pemrograman Web Framework dengan [Link] I 81


• PUT: Digunakan untuk memperbarui seluruh
sumber daya yang sudah ada. Contoh:

PUT /api/products/1

Permintaan ini akan memperbarui data


produk dengan ID 1.

• DELETE: Digunakan untuk menghapus sumber


daya yang ada di server. Contoh:

DELETE /api/products/1

Permintaan ini akan menghapus produk


dengan ID 1.

Setiap metode HTTP memungkinkan


pengembang untuk memanipulasi sumber daya
dengan cara yang sesuai standar, menjadikan API
REST lebih konsisten dan dapat diprediksi.

Struktur URL dan Endpoints


Dalam REST, setiap sumber daya
direpresentasikan dengan Uniform Resource

82 I Pemrograman Web Framework dengan [Link]


Identifier (URI) atau URL. URL ini menggambarkan
endpoint yang dapat diakses oleh klien untuk
berinteraksi dengan data di server.
1. Struktur URL:
• URL harus jelas, konsisten, dan
menggambarkan sumber daya dengan baik.
• Gunakan nama sumber daya dalam bentuk
jamak. Contoh:
GET /api/users
POST /api/products
URL di atas menunjukkan bahwa klien
sedang mengakses daftar pengguna atau membuat
produk baru.
2. Endpoints:
Endpoint adalah titik akses untuk sumber
daya tertentu. Contoh endpoint dengan parameter:
GET /api/users/1
Endpoint ini mengakses data pengguna
dengan ID 1.
3. Query Parameters:
Digunakan untuk menyaring atau
memodifikasi data yang dikembalikan oleh server.
Contoh:

Pemrograman Web Framework dengan [Link] I 83


GET
/api/products?category=electronics&limit=10
Permintaan ini mengambil 10 produk dalam
kategori elektronik.
4. Path Parameters:
Menggunakan bagian URL untuk
menentukan sumber daya tertentu. Contoh:
GET /api/orders/123/items
Endpoint ini mengakses daftar item dari
pesanan dengan ID 123.
REST API yang dirancang dengan baik
memungkinkan pengembang untuk membangun
aplikasi yang mudah dipelihara, terukur, dan
kompatibel dengan berbagai teknologi. Kombinasi
penggunaan HTTP Methods yang sesuai dan struktur
URL yang konsisten adalah kunci dari API REST yang
efektif.

B. Membuat Server dengan [Link]


[Link] adalah framework web minimalis
dan fleksibel untuk [Link], yang digunakan untuk
membangun server dan aplikasi web. Dengan
[Link], pengembang dapat menangani
permintaan HTTP, membuat rute, dan mengelola

84 I Pemrograman Web Framework dengan [Link]


middleware dengan lebih mudah dan efisien.
Framework ini sangat populer karena
kesederhanaan, skalabilitas, dan dukungannya
terhadap berbagai kebutuhan pengembangan web,
seperti REST API dan aplikasi web kompleks.
Berikut adalah langkah-langkah dalam
membuat server menggunakan [Link]:
1. Instalasi [Link]
Sebelum memulai, pastikan [Link] sudah
terinstal di sistem. Kemudian, buat folder proyek
baru dan instal [Link]:
mkdir my-express-app
cd my-express-app
npm init -y
npm install express

Perintah ini akan membuat file [Link]


dan menginstal [Link] sebagai dependensi
proyek.
2. Membuat File Utama Server
Buat file JavaScript utama, misalnya
[Link]. File ini akan menjadi tempat kode
server.
3. Membuat Server Dasar dengan [Link]

Pemrograman Web Framework dengan [Link] I 85


Kode berikut adalah contoh sederhana
server yang merespons permintaan pada root
endpoint (/):
const express = require('express'); //
Mengimpor [Link]
const app = express(); // Membuat
instance aplikasi Express

const PORT = 3000; // Menentukan port


server

// Rute dasar
[Link]('/', (req, res) => {
[Link]('Halo, Selamat Datang di
Server [Link]!');
});

// Menjalankan server
[Link](PORT, () => {
[Link](`Server berjalan di
[Link]
});

Jalankan server dengan perintah berikut:


node [Link]

Server sekarang berjalan dan dapat diakses


melalui browser atau API client seperti Postman
pada URL [Link]

86 I Pemrograman Web Framework dengan [Link]


4. Menambahkan Middleware
Middleware adalah fungsi yang menangani
permintaan sebelum diteruskan ke rute
berikutnya. Misalnya, untuk menangani data
JSON dalam permintaan, kita dapat
menambahkan middleware:
[Link]([Link]()); // Middleware
untuk parsing JSON

Middleware dapat digunakan untuk


logging, autentikasi, validasi, atau fungsi lainnya.

5. Membuat Rute Tambahan


[Link] memudahkan kita untuk
membuat berbagai rute sesuai kebutuhan.
Contoh:

// Rute untuk mendapatkan semua produk


[Link]('/products', (req, res) => {
[Link]([{ id: 1, name: 'Produk A'
}, { id: 2, name: 'Produk B' }]);
});

// Rute untuk menambahkan produk baru


[Link]('/products', (req, res) => {

Pemrograman Web Framework dengan [Link] I 87


const newProduct = [Link];
[Link](201).json({ message:
'Produk berhasil ditambahkan', product:
newProduct });
});

Kita dapat mengakses rute ini dengan


metode HTTP yang sesuai, seperti GET atau POST.

6. Menangani Kesalahan (Error Handling)


[Link] menyediakan cara sederhana
untuk menangani kesalahan. Kita dapat
menambahkan middleware untuk menangkap
kesalahan:
[Link]((err, req, res, next) => {
[Link]([Link]);
[Link](500).json({ error:
'Terjadi kesalahan pada server' });
});

7. Menambahkan Fitur Static Files (Opsional)


Untuk melayani file statis seperti gambar
atau dokumen, gunakan middleware
[Link]:

[Link]('/static',
[Link]('public'));

88 I Pemrograman Web Framework dengan [Link]


Folder public akan digunakan untuk
menyimpan file statis, dan file dapat diakses
melalui URL seperti
[Link]

8. Menjalankan dan Menguji Server


Setelah menambahkan semua fitur,
jalankan server kembali menggunakan:
node [Link]

Uji server kita dengan browser, Postman, atau


curl untuk memastikan rute dan fungsionalitas
bekerja sesuai kebutuhan.
Dengan mengikuti langkah-langkah ini, kita
dapat membuat server berbasis [Link] yang siap
digunakan untuk membangun aplikasi web atau
REST API. Framework ini memberikan fleksibilitas
tinggi dalam pengelolaan rute, middleware, dan
pengolahan data, sehingga memudahkan
pengembangan aplikasi modern.

Pemrograman Web Framework dengan [Link] I 89


C. Menangani Request dan Response
Dalam pengembangan server menggunakan
[Link], menangani permintaan (request) dan
memberikan tanggapan (response) merupakan
bagian penting dari fungsionalitas aplikasi web.
Setiap kali klien mengirimkan request ke server, data
tersebut dapat dikirim melalui berbagai cara, seperti
query parameters, body, dan headers. [Link]
menyediakan kemudahan dalam mengakses dan
memproses data ini, membuat pengembangan
aplikasi web menjadi lebih efisien dan mudah.
Melalui framework ini, kita bisa dengan mudah
membaca data dalam request dan mengirimkan
response sesuai dengan kebutuhan.
1. Query Parameters, Body, and Header
Salah satu cara paling umum untuk
mengirim data melalui request adalah dengan
menggunakan query parameters. Ini adalah data
yang dikirimkan melalui URL dalam format
?key=value, yang biasanya digunakan untuk
menyaring atau memberikan informasi tambahan
pada permintaan. Misalnya, URL seperti
[Link]
nics mengandung query parameter

90 I Pemrograman Web Framework dengan [Link]


category=electronics. Dengan [Link], kita
dapat dengan mudah mengakses data ini melalui
properti [Link], memungkinkan kita untuk
membaca query parameters langsung dari objek
permintaan. Query parameters sering digunakan
dalam operasi pencarian, penyaringan, atau
paginasi data, sehingga memudahkan interaksi
dinamis antara klien dan server.
Selain itu, body dalam request juga sering
digunakan untuk mengirimkan data yang lebih
kompleks, terutama saat menggunakan metode
POST, PUT, atau PATCH. Data yang dikirim
melalui body biasanya berbentuk JSON, yang
merupakan format standar untuk komunikasi
antara klien dan server. Dengan menggunakan
middleware bawaan [Link] seperti
[Link](), kita dapat dengan mudah
memparsing data JSON yang dikirimkan oleh
klien. Middleware ini mengonversi string JSON
menjadi objek JavaScript yang dapat kita akses
melalui [Link]. Hal ini mempermudah kita
dalam mengelola data yang dikirim oleh klien,
baik untuk membuat atau memperbarui sumber
daya di server.

Pemrograman Web Framework dengan [Link] I 91


Selain body dan query parameters,
headers dalam request juga berperan penting,
terutama untuk pengiriman metadata seperti
jenis konten atau token otentikasi. Dalam
[Link], kita dapat mengakses header melalui
[Link], yang memungkinkan kita untuk
mengambil informasi penting dari setiap request,
seperti [Link]['authorization'] untuk token
otentikasi. Headers juga sering digunakan untuk
menyampaikan preferensi klien, seperti bahasa
atau tipe konten yang diinginkan, yang penting
untuk pengelolaan aplikasi yang membutuhkan
konfigurasi khusus berdasarkan jenis klien yang
mengirimkan permintaan.
2. Parsing JSON Data
Dalam pengolahan data yang dikirim
melalui body, parsing JSON menjadi salah satu
bagian yang tak terpisahkan. Ketika data dikirim
dalam format JSON, [Link] menyediakan
kemampuan untuk memparsingnya secara
otomatis sehingga kita dapat menggunakannya
sebagai objek JavaScript dalam aplikasi.
Middleware [Link]() memudahkan kita
dalam hal ini, karena kita tidak perlu lagi menulis

92 I Pemrograman Web Framework dengan [Link]


kode untuk memparsing data secara manual. Hal
ini mempermudah pengelolaan komunikasi
antara server dan klien, memungkinkan
pengembang untuk fokus pada pengolahan data
tanpa harus khawatir tentang format komunikasi
yang digunakan.
Setelah kita berhasil menangani data yang
diterima dalam request, langkah selanjutnya
adalah memberikan tanggapan (response)
kepada klien. Dalam [Link], kita dapat
menggunakan beberapa metode untuk
mengirimkan response, seperti [Link]() untuk
mengirimkan string atau data mentah, [Link]()
untuk mengirimkan data dalam format JSON, dan
[Link]() untuk menetapkan kode status HTTP
pada response. Kode status seperti 200 (OK), 201
(Created), 404 (Not Found), atau 500 (Internal
Server Error) memberi tahu klien tentang hasil
dari permintaan mereka, yang sangat penting
untuk memahami apakah permintaan berhasil
atau ada masalah pada server.
Pengelolaan request dan response yang
efisien sangat penting untuk membangun API
yang handal dan responsif. Dalam aplikasi yang

Pemrograman Web Framework dengan [Link] I 93


lebih kompleks, kita bisa menggunakan
middleware tambahan untuk memproses data
sebelum diteruskan ke handler utama. Sebagai
contoh, middleware validasi bisa digunakan
untuk memastikan bahwa body atau query
parameters yang diterima sesuai dengan format
yang diinginkan. Dengan demikian, kita dapat
memastikan bahwa hanya data yang valid yang
diterima dan diproses oleh aplikasi,
meminimalkan potensi kesalahan yang mungkin
terjadi (Faqih & Wahyudi, 2022).
Secara umum, kemampuan [Link]
dalam menangani berbagai jenis data dalam
request dan memberikan tanggapan yang sesuai
memungkinkan kita untuk membangun aplikasi
web yang efektif dan efisien. Dengan
memanfaatkan query parameters, body, headers,
dan parsing JSON secara otomatis, kita bisa
menciptakan server yang dapat menangani
berbagai jenis permintaan dari klien, baik itu
aplikasi web, mobile, atau perangkat lainnya.
Fleksibilitas dan kemudahan ini memungkinkan
pengembangan aplikasi modern yang skalabel
dan dapat diandalkan.

94 I Pemrograman Web Framework dengan [Link]


D. Implementasi CRUD dengan [Link]
CRUD (Create, Read, Update, Delete) adalah
konsep dasar dalam pengembangan aplikasi web yang
memungkinkan kita untuk melakukan operasi dasar
terhadap data. Dengan menggunakan [Link], kita
dapat dengan mudah mengimplementasikan
fungsionalitas CRUD untuk mengelola data dalam
aplikasi web. Dalam konteks ini, kita akan membahas
bagaimana mengatur routing untuk operasi CRUD dan
bagaimana mengelola data melalui API menggunakan
[Link].
Untuk Create atau membuat data baru, kita
umumnya menggunakan metode HTTP POST. Dalam
[Link], kita dapat mendefinisikan route untuk
menangani permintaan POST yang mengirimkan data
baru. Data tersebut biasanya dikirimkan dalam bentuk
JSON di body permintaan. Ketika permintaan POST
diterima, server dapat memproses data tersebut,
menyimpannya dalam database, dan mengirimkan
response yang mengonfirmasi bahwa data telah
berhasil dibuat. Misalnya, jika kita ingin membuat
entri baru untuk produk dalam aplikasi toko online,

Pemrograman Web Framework dengan [Link] I 95


kita akan menerima data produk dan menyimpannya
dalam database untuk diproses lebih lanjut.
Selanjutnya, operasi Read bertujuan untuk
membaca atau mengambil data dari server. Operasi ini
sering menggunakan metode HTTP GET. Dalam
[Link], kita dapat membuat route untuk
menangani permintaan GET, baik untuk mengambil
semua data ataupun data tertentu berdasarkan ID atau
parameter lainnya. Misalnya, jika kita ingin mengambil
semua produk atau produk berdasarkan kategori
tertentu, kita akan mengakses database dan
mengirimkan data yang relevan kepada klien dalam
bentuk JSON. Dengan menggunakan query parameters,
kita bisa menyaring data sesuai dengan kriteria yang
diberikan oleh klien.
Untuk Update atau memperbarui data yang
sudah ada, kita menggunakan metode HTTP PUT atau
PATCH. Dalam [Link], kita dapat mendefinisikan
route untuk menangani permintaan PUT yang
memungkinkan kita untuk memperbarui data yang
ada di database berdasarkan ID atau parameter
lainnya. Data yang dikirim dalam body permintaan
akan menggantikan data lama dengan data baru.
Sebagai contoh, kita bisa memperbarui informasi

96 I Pemrograman Web Framework dengan [Link]


produk, seperti harga atau deskripsi, dengan
menerima data terbaru dari klien dan memperbarui
entri yang sesuai dalam database. Kita juga bisa
menggunakan metode PATCH jika hanya ingin
memperbarui sebagian dari data yang ada, seperti
memperbarui harga tanpa mengubah informasi
lainnya.
Terakhir, operasi Delete digunakan untuk
menghapus data dari server. Kita menggunakan
metode HTTP DELETE untuk menghapus entri
berdasarkan ID atau parameter lainnya. Dalam
[Link], kita dapat membuat route DELETE untuk
menerima permintaan penghapusan data. Misalnya,
jika kita ingin menghapus produk dari database, kita
akan menangani permintaan DELETE dan menghapus
entri produk yang sesuai berdasarkan ID yang
dikirimkan oleh klien. Setelah penghapusan berhasil,
server akan mengirimkan response yang memberi
tahu klien bahwa operasi delete telah selesai.
Untuk menghubungkan operasi CRUD dengan
database, kita perlu menggunakan sistem manajemen
basis data (DBMS) seperti MongoDB, MySQL, atau
PostgreSQL. [Link] tidak menyediakan fitur
database secara langsung, namun kita dapat

Pemrograman Web Framework dengan [Link] I 97


menggunakan pustaka atau ORM (Object Relational
Mapping) untuk memudahkan interaksi dengan
database, seperti Mongoose untuk MongoDB atau
Sequelize untuk MySQL/PostgreSQL. Dengan
menggunakan ORM ini, kita dapat melakukan operasi
CRUD dengan lebih mudah dan terstruktur.
Dalam implementasi CRUD dengan [Link],
kita juga perlu memperhatikan error handling.
Misalnya, jika ada kesalahan saat memproses
permintaan, seperti data yang tidak ditemukan atau
kesalahan saat mengakses database, kita harus
memberikan response yang jelas kepada klien,
misalnya dengan mengirimkan status 404 jika data
tidak ditemukan atau status 500 untuk kesalahan
server internal. Penanganan error yang tepat
membantu meningkatkan pengalaman pengguna dan
menjaga kestabilan aplikasi.
Keseluruhannya, [Link] mempermudah
implementasi CRUD dalam aplikasi web dengan
menyediakan routing yang sederhana dan fleksibel.
Dengan mendefinisikan route untuk setiap operasi
CRUD, kita dapat membuat API yang memungkinkan
aplikasi web untuk berinteraksi dengan data secara
efisien. Selain itu, [Link] memungkinkan kita untuk

98 I Pemrograman Web Framework dengan [Link]


mengintegrasikan berbagai sistem basis data untuk
mengelola data, memperbarui entri, menghapus data,
dan memberikan hasil yang sesuai bagi pengguna
aplikasi.
Dengan demikian, [Link] menjadi pilihan
yang sangat baik dalam membangun aplikasi berbasis
web yang membutuhkan pengelolaan data secara
dinamis. Keunggulan framework ini terletak pada
kesederhanaannya dalam menangani request dan
response serta kemampuannya untuk mengelola
operasi CRUD dengan mudah dan efisien.

Pemrograman Web Framework dengan [Link] I 99


Bab 5: Middleware dalam
[Link]
A. Apa Itu Middleware?
Dalam pengembangan aplikasi web
menggunakan [Link], middleware merujuk
pada fungsi atau kode yang berjalan selama siklus
hidup permintaan (request) dan sebelum
memberikan tanggapan (response) ke klien.
Middleware dapat dianggap sebagai lapisan
perantara yang memungkinkan kita untuk
memanipulasi request dan response, melakukan
berbagai tindakan seperti validasi, otentikasi, log,
pengolahan data, atau bahkan menghentikan
permintaan jika perlu. Middleware bekerja secara
berurutan dan bisa digunakan di seluruh aplikasi
atau hanya untuk route tertentu.
Secara teknis, middleware adalah fungsi
yang menerima tiga parameter utama: req
(request), res (response), dan next. Parameter req
mewakili objek permintaan yang masuk, res
mewakili objek respons yang akan dikirimkan ke
klien, dan next adalah fungsi yang digunakan untuk

100 IPemrograman Web Framework dengan [Link]


meneruskan eksekusi ke middleware berikutnya
dalam urutan yang ditentukan. Jika middleware
tidak memanggil next(), permintaan akan terhenti
dan tidak diteruskan ke middleware atau handler
berikutnya.
Middleware di [Link] sangat berguna
untuk berbagai keperluan, seperti otentikasi dan
otorisasi. Sebagai contoh, kita bisa membuat
middleware yang memeriksa apakah pengguna
sudah login atau memiliki token otentikasi yang
valid sebelum melanjutkan ke route tertentu. Jika
pengguna tidak memenuhi persyaratan,
middleware dapat menghentikan permintaan dan
mengirimkan response error, seperti kode status
401 (Unauthorized). Dengan cara ini, middleware
membantu melindungi aplikasi dari akses yang
tidak sah (Saniati et al., 2022).
Selain otentikasi, middleware juga berguna
untuk memanipulasi atau memvalidasi data yang
dikirimkan oleh klien. Sebagai contoh, middleware
bisa digunakan untuk memvalidasi input sebelum
data diterima dan diproses oleh handler utama.
Middleware seperti [Link]() atau
[Link]() sering digunakan untuk

I 101
Pemrograman Web Framework dengan [Link]
melakukan parsing data JSON atau form data yang
dikirim dalam request body. Ini memastikan
bahwa data yang diterima oleh server berada
dalam format yang diinginkan dan siap untuk
diproses lebih lanjut.
Selain itu, middleware juga sangat
bermanfaat untuk menangani error. Dalam aplikasi
web, sangat penting untuk memiliki mekanisme
penanganan error yang baik untuk memberikan
feedback yang jelas kepada pengguna dan
mencegah aplikasi mengalami crash. Middleware
yang menangani error sering diletakkan di bagian
bawah rantai middleware, dan akan menangkap
error yang terjadi di sepanjang siklus hidup
permintaan. Dengan menggunakan middleware
error handling, kita dapat mengirimkan response
error yang lebih informatif, seperti kode status dan
pesan error yang relevan.
Selain penggunaan umum untuk otentikasi
dan validasi, middleware juga sering digunakan
untuk mencatat log aktivitas aplikasi. Misalnya,
kita bisa membuat middleware yang mencatat
setiap permintaan yang masuk, termasuk
informasi seperti waktu permintaan, URL yang

102 IPemrograman Web Framework dengan [Link]


diminta, dan status respons. Ini berguna untuk
pemantauan, debugging, dan auditing aplikasi.
Middleware logging bisa sangat berguna terutama
dalam aplikasi yang besar dan kompleks.
Middleware juga memberi kita fleksibilitas
dalam hal pengaturan skala dan modularitas. Kita
bisa mengonfigurasi middleware secara global
untuk semua route atau hanya untuk route
tertentu. Ini memungkinkan kita untuk memiliki
kontrol yang lebih baik atas perilaku aplikasi, di
mana kita bisa memfilter atau memproses request
berdasarkan kebutuhan spesifik. Sebagai contoh,
middleware dapat diterapkan hanya pada route
yang memerlukan otentikasi, sementara route lain
yang lebih terbuka dapat dibiarkan tanpa
otentikasi.
Umumnya, middleware adalah konsep yang
sangat penting dalam [Link] yang memberikan
fleksibilitas dan kontrol lebih dalam pengelolaan
alur permintaan dan respons aplikasi. Dengan
menggunakan middleware, kita dapat memecah
aplikasi menjadi bagian-bagian yang lebih
modular, mengelola dan memvalidasi data,

I 103
Pemrograman Web Framework dengan [Link]
menangani error, serta menjaga aplikasi tetap
aman dan dapat dipelihara.

B. Jenis-Jenis Middleware
Dalam pengembangan aplikasi web
menggunakan [Link], terdapat berbagai jenis
middleware yang memiliki fungsi dan tujuan
masing-masing. Middleware adalah komponen
penting yang memungkinkan kita untuk mengelola
alur data antara request dan response. Berikut
adalah beberapa jenis middleware yang sering
digunakan dalam aplikasi [Link]:
1. Middleware Aplikasi (Application-Level
Middleware)
Middleware ini diterapkan pada aplikasi
secara keseluruhan atau pada route tertentu
dalam aplikasi. Middleware aplikasi sering
digunakan untuk memeriksa request sebelum
mencapai route handler. Contoh umum dari
middleware aplikasi adalah otentikasi dan
logging. Misalnya, kita bisa menggunakan
middleware untuk memverifikasi token
pengguna pada setiap permintaan yang masuk,
atau untuk mencatat log setiap kali pengguna

104 IPemrograman Web Framework dengan [Link]


mengakses route tertentu. Middleware ini
diterapkan pada seluruh aplikasi atau hanya
pada subset route yang kita tentukan.
[Link]((req, res, next) => {
[Link](`Request URL:
${[Link]}`);
next();
});

2. Middleware Router (Router-Level Middleware)


Middleware ini diterapkan hanya pada
route tertentu yang ditangani oleh router.
Middleware router sering digunakan untuk
mengelola permintaan yang spesifik terhadap
bagian aplikasi tertentu. Sebagai contoh, kita
bisa mengaplikasikan middleware hanya pada
route yang membutuhkan autentikasi.
Middleware ini dapat diterapkan pada instance
router dengan cara yang serupa dengan
middleware aplikasi, tetapi hanya berlaku pada
route yang diinginkan.
const router = [Link]();

[Link]((req, res, next) => {


[Link]('This is a router-
level middleware.');
next();
});

I 105
Pemrograman Web Framework dengan [Link]
3. Middleware Error Handling
Middleware ini digunakan untuk
menangani error yang terjadi dalam aplikasi.
Middleware error handling diletakkan pada
urutan terakhir dalam rangkaian middleware.
Fungsi ini memiliki empat parameter: err, req,
res, dan next. Parameter err menangkap error
yang terjadi di middleware sebelumnya.
Dengan menggunakan middleware error
handling, kita dapat mengirimkan response
yang sesuai kepada klien, misalnya status 500
untuk kesalahan server internal atau status 404
jika resource tidak ditemukan.
[Link]((err, req, res, next) => {
[Link]([Link]);
[Link](500).send('Something
went wrong!');
});

4. Built-in Middleware
[Link] menyediakan beberapa
middleware bawaan yang sering digunakan
untuk mempermudah pengelolaan request dan
response. Contoh yang paling sering digunakan
adalah middleware [Link]() dan
[Link](), yang memungkinkan

106 IPemrograman Web Framework dengan [Link]


kita untuk menguraikan (parse) data JSON dan
data URL-encoded yang dikirimkan dalam body
request. Middleware ini memudahkan proses
ekstraksi data yang dikirim oleh klien, sehingga
data tersebut bisa digunakan dalam aplikasi.
[Link]([Link]());
[Link]([Link]({
extended: true }));

5. Third-Party Middleware
Selain middleware bawaan, [Link]
juga mendukung penggunaan middleware
pihak ketiga. Ini memungkinkan kita untuk
menambahkan fungsionalitas tambahan ke
aplikasi tanpa perlu menulis kode dari awal.
Beberapa middleware pihak ketiga yang sering
digunakan dalam pengembangan aplikasi
[Link] adalah morgan untuk logging, body-
parser untuk parsing body request, helmet
untuk meningkatkan keamanan aplikasi, dan
cors untuk mengatur kebijakan CORS (Cross-
Origin Resource Sharing).
const morgan = require('morgan');
[Link](morgan('tiny')); // Log
request dengan format 'tiny'

I 107
Pemrograman Web Framework dengan [Link]
6. Middleware untuk Static Files
Middleware ini digunakan untuk mengelola
dan melayani file statis, seperti gambar, CSS, dan
JavaScript yang tidak berubah. [Link] memiliki
middleware built-in, yaitu [Link](), yang
memungkinkan kita untuk memberikan akses
langsung ke file-file statis dalam aplikasi. Dengan
middleware ini, kita bisa melayani file statis dari
folder tertentu tanpa memerlukan routing khusus.
[Link]([Link]('public'));

7. Custom Middleware
Selain middleware bawaan dan pihak
ketiga, kita juga bisa membuat middleware
kustom sesuai dengan kebutuhan aplikasi.
Middleware kustom memungkinkan kita untuk
menambahkan logika tertentu yang diperlukan
dalam aplikasi, seperti memvalidasi input,
menghitung waktu respons, atau mengatur
metadata dalam request. Middleware kustom
memberikan fleksibilitas penuh dalam
mendefinisikan alur aplikasi yang kompleks.

108 IPemrograman Web Framework dengan [Link]


[Link]((req, res, next) => {
[Link] = [Link](); //
Menyimpan waktu mulai
next();
});

8. Middleware untuk Autentikasi dan Otorisasi


Middleware ini digunakan untuk
memastikan bahwa pengguna yang mengakses
route tertentu memiliki hak akses yang sesuai.
Misalnya, kita bisa menggunakan middleware
untuk memverifikasi token JWT atau sesi
pengguna untuk memastikan bahwa pengguna
telah terotentikasi sebelum mengakses
halaman yang dilindungi. Selain itu,
middleware ini dapat memeriksa apakah
pengguna memiliki peran atau izin yang cukup
untuk melakukan operasi tertentu (otorisasi).
const authenticate = (req, res, next)
=> {
if (![Link]) {
return
[Link](401).send('Unauthorized');
}
next();
};

I 109
Pemrograman Web Framework dengan [Link]
Secara keseluruhan, berbagai jenis
middleware ini memberikan fleksibilitas dan
kontrol lebih besar dalam menangani berbagai
skenario pengolahan request dan response dalam
aplikasi web berbasis [Link]. Dengan memilih
dan menerapkan middleware yang tepat, kita
dapat membangun aplikasi yang lebih efisien,
aman, dan mudah dipelihara.

C. Menangani Error dengan Middleware


Dalam pengembangan aplikasi web
menggunakan [Link], salah satu aspek penting
yang perlu diperhatikan adalah penanganan error.
Penanganan error yang baik tidak hanya
membantu menjaga pengalaman pengguna, tetapi
juga memastikan aplikasi tetap stabil meskipun
terjadi kesalahan. Middleware error handling
adalah fitur yang dirancang khusus untuk
menangkap, memproses, dan memberikan respons
terhadap error yang terjadi dalam siklus hidup
request dan response.
Error handling di [Link] menggunakan
middleware khusus yang terdiri dari empat
parameter: err, req, res, dan next. Middleware ini

110 IPemrograman Web Framework dengan [Link]


biasanya ditempatkan di bagian akhir rantai
middleware untuk memastikan semua request
yang melewati middleware sebelumnya dapat
ditangkap apabila terjadi error. Middleware ini
memberikan cara yang terstruktur untuk
menangani error, mulai dari menangkap error
runtime, memvalidasi input yang tidak valid,
hingga memberikan respons yang jelas kepada
klien (Shkodra et al., 2021).
Misalnya, jika ada error pada route tertentu,
middleware error dapat digunakan untuk
menangkap dan memproses error tersebut tanpa
menyebabkan crash pada server. Sebagai contoh,
ketika aplikasi tidak dapat menemukan resource
yang diminta (404 Not Found), middleware error
dapat memberikan respons yang relevan kepada
pengguna:

[Link]((req, res, next) => {


[Link](404).send({ error:
'Resource not found' });
});

Selain menangani error 404, middleware


error juga berguna untuk menangkap error yang

I 111
Pemrograman Web Framework dengan [Link]
disebabkan oleh masalah internal server. Dengan
menggunakan middleware error, kita dapat
memberikan respons yang lebih terstruktur,
seperti memberikan kode status HTTP 500
(Internal Server Error) bersama dengan pesan
error yang informatif:

[Link]((err, req, res, next) => {


[Link]([Link]); // Log
error untuk debugging
[Link](500).send({ error:
'Something went wrong!' });
});

Middleware error juga dapat digunakan


untuk memvalidasi input pengguna dan
memberikan respons jika data yang dikirim tidak
valid. Sebagai contoh, jika pengguna mengirimkan
data dengan format yang salah atau melewatkan
parameter yang dibutuhkan, middleware error
dapat memberikan respons dengan kode status
400 (Bad Request):

[Link]((err, req, res, next) => {


if ([Link] ===
'ValidationError') {
[Link](400).send({ error:
[Link] });

112 IPemrograman Web Framework dengan [Link]


} else {
next(err); // Teruskan error
ke middleware berikutnya
}
});

Dalam aplikasi yang lebih kompleks,


middleware error dapat diatur untuk membedakan
jenis error yang berbeda dan memberikan respons
yang sesuai. Sebagai contoh, kita dapat memeriksa
apakah error berasal dari database, otentikasi, atau
error aplikasi lainnya, kemudian memberikan
pesan error yang lebih spesifik kepada pengguna.
Hal ini penting untuk menjaga keamanan aplikasi,
dengan memastikan bahwa detail teknis tidak
terekspos kepada pengguna akhir.
Selain memberikan respons kepada klien,
middleware error juga dapat digunakan untuk
mencatat log error ke dalam sistem log, seperti
Winston atau Morgan, untuk tujuan pemantauan
dan debugging. Dengan cara ini, pengembang dapat
melacak error yang terjadi di aplikasi dan
memperbaikinya secara proaktif. Integrasi
middleware logging dengan middleware error
sangat membantu dalam pengelolaan aplikasi
berskala besar.

I 113
Pemrograman Web Framework dengan [Link]
Berikut contoh pengaturan middleware
error yang menggabungkan pencatatan log dan
pengiriman respons ke klien:

[Link]((err, req, res, next) => {


[Link](`Error occurred:
${[Link]}`);
[Link]([Link] ||
500).send({ error: [Link] });
});

Kesimpulannya, middleware untuk


menangani error adalah komponen penting dalam
aplikasi [Link] yang membantu menjaga
keandalan dan keamanan aplikasi. Dengan
merancang middleware error handling yang baik,
kita dapat memberikan respons yang relevan
kepada klien, meminimalkan dampak kesalahan
pada pengalaman pengguna, dan memastikan
server tetap berjalan dengan lancar. Ini membuat
aplikasi web lebih aman, terstruktur, dan mudah
dipelihara.

114 IPemrograman Web Framework dengan [Link]


Bab 6: Manajemen Database
dengan [Link]
A. Database Relasional vs Non-Relasional
Database adalah tulang punggung dari banyak
aplikasi modern, menyimpan, mengorganisasi, dan
mengelola data dalam berbagai bentuk. Secara umum,
terdapat dua kategori utama dalam dunia basis data:
database relasional (Relational Database) dan
database non-relasional (Non-Relational Database).
Keduanya memiliki kelebihan dan kekurangan, yang
membuat mereka cocok untuk kebutuhan tertentu.
Memahami perbedaan mendasar di antara keduanya
sangat penting untuk memilih teknologi yang tepat
untuk sebuah aplikasi.
Database relasional adalah sistem basis data
yang menggunakan struktur tabel untuk menyimpan
data. Data dalam tabel-tabel ini diatur dalam baris dan
kolom, di mana setiap kolom mewakili atribut data dan
setiap baris adalah entri data individu. Salah satu ciri
khas dari database relasional adalah penggunaan
Structured Query Language (SQL) untuk melakukan
operasi seperti pencarian, pembaruan, dan

I 115
Pemrograman Web Framework dengan [Link]
penghapusan data. Contoh populer dari database
relasional termasuk MySQL, PostgreSQL, dan
Microsoft SQL Server. Keunggulan utama database
relasional terletak pada konsistensi dan integritas
data, yang difasilitasi oleh aturan-aturan seperti relasi
antar tabel dan penggunaan kunci utama (primary
key) serta kunci asing (foreign key).
Di sisi lain, database non-relasional tidak
menggunakan tabel sebagai struktur utama untuk
menyimpan data. Sebaliknya, data disimpan dalam
berbagai format seperti dokumen (document-based),
pasangan kunci-nilai (key-value), graf (graph), atau
kolom lebar (wide-column). Salah satu contoh
database non-relasional yang terkenal adalah
MongoDB, yang berbasis dokumen dan menyimpan
data dalam format JSON. Jenis database ini lebih
fleksibel karena tidak memiliki skema yang kaku
seperti database relasional. Hal ini membuatnya
sangat cocok untuk aplikasi dengan data yang tidak
terstruktur atau kebutuhan yang sering berubah.
Salah satu perbedaan utama antara kedua jenis
database ini adalah bagaimana mereka menangani
skema data. Database relasional memerlukan skema
yang ditentukan sebelumnya, di mana struktur tabel,

116 IPemrograman Web Framework dengan [Link]


kolom, dan tipe data harus dirancang dengan jelas
sebelum data dapat dimasukkan. Hal ini memastikan
integritas data tetapi dapat menjadi kendala saat ada
perubahan kebutuhan. Sebaliknya, database non-
relasional tidak membutuhkan skema tetap,
memungkinkan fleksibilitas dalam menyimpan data
yang bervariasi tanpa memerlukan perubahan
struktur (Azkarin et al., 2023).
Dalam hal performa, database relasional
cenderung lebih efisien untuk aplikasi yang
membutuhkan konsistensi tinggi, seperti sistem
keuangan atau manajemen inventaris. Namun, untuk
aplikasi yang membutuhkan skalabilitas tinggi, seperti
media sosial atau platform e-commerce, database non-
relasional sering menjadi pilihan. Ini karena database
non-relasional dirancang untuk menangani volume
data besar dan mendukung arsitektur distribusi
horizontal, di mana data dapat disebar ke beberapa
server dengan mudah.
Keunggulan lain dari database non-relasional
adalah kemampuannya untuk bekerja dengan baik
dengan data semi-terstruktur atau tidak terstruktur.
Dalam era big data, jenis data seperti log pengguna,
data sensor IoT, atau data multimedia sering tidak

I 117
Pemrograman Web Framework dengan [Link]
cocok untuk disimpan dalam tabel relasional yang
kaku. Database non-relasional seperti MongoDB,
Redis, atau Cassandra menawarkan solusi untuk
kebutuhan ini dengan format penyimpanan yang lebih
fleksibel.
Namun, kelemahan database non-relasional
terletak pada kurangnya konsistensi data yang ketat.
Tidak seperti database relasional yang mendukung
transaksi ACID (Atomicity, Consistency, Isolation,
Durability), banyak database non-relasional
menggunakan model konsistensi yang longgar seperti
eventual consistency. Hal ini berarti data mungkin
tidak segera diperbarui di semua node dalam sistem
terdistribusi, meskipun akhirnya akan menjadi
konsisten.
Secara umum, pilihan antara database relasional
dan non-relasional tergantung pada kebutuhan
aplikasi. Jika sebuah aplikasi membutuhkan struktur
data yang konsisten dan transaksi yang andal, maka
database relasional adalah pilihan terbaik. Namun, jika
fleksibilitas, kecepatan, dan kemampuan untuk
menangani data besar menjadi prioritas, database
non-relasional dapat memberikan solusi yang lebih
baik. Kombinasi keduanya, yang dikenal sebagai

118 IPemrograman Web Framework dengan [Link]


polygot persistence, juga semakin populer, di mana
aplikasi menggunakan kedua jenis database untuk
memenuhi kebutuhan spesifik masing-masing
komponen sistem.

B. Menggunakan MongoDB dengan [Link]


MongoDB adalah salah satu database non-
relasional yang populer digunakan dalam
pengembangan aplikasi modern, khususnya dalam
lingkungan [Link]. MongoDB berbasis dokumen dan
menggunakan format JSON (atau lebih tepatnya BSON,
Binary JSON) untuk menyimpan data. Fleksibilitas
dalam struktur datanya, performa yang baik, serta
dukungan skala horizontal menjadikannya pilihan
yang sering digunakan dalam pengembangan aplikasi
berbasis web. Ketika dipadukan dengan [Link],
MongoDB memberikan ekosistem yang tangguh untuk
membangun aplikasi yang responsif dan skalabel.
Untuk menggunakan MongoDB dengan [Link],
langkah pertama adalah menginstal MongoDB driver
atau ODM (Object Data Modeling) seperti Mongoose.
Driver MongoDB adalah pustaka resmi yang
memungkinkan aplikasi [Link] terhubung langsung
dengan MongoDB dan melakukan operasi seperti

I 119
Pemrograman Web Framework dengan [Link]
membuat, membaca, memperbarui, atau menghapus
data. Sementara itu, Mongoose menawarkan
pendekatan berbasis model, yang memungkinkan
pengembang mendefinisikan skema untuk data yang
disimpan di MongoDB, sehingga memberikan sedikit
struktur pada database yang seharusnya tidak
berstruktur.
Proses dimulai dengan menginstal dependensi
MongoDB. Jika kita menggunakan driver MongoDB,
perintah instalasi berikut digunakan:
npm install mongodb

Namun, jika kita lebih memilih Mongoose untuk


manajemen skema data yang lebih mudah, perintah
berikut digunakan:
npm install mongoose

Setelah instalasi, langkah berikutnya adalah


menghubungkan aplikasi [Link] ke server MongoDB.
Dengan MongoDB driver, koneksi dapat dilakukan
seperti ini:
const { MongoClient } =
require('mongodb');

const url = 'mongodb://localhost:27017';


// URL MongoDB

120 IPemrograman Web Framework dengan [Link]


const dbName = 'mydatabase'; // Nama
database

(async function connectDB() {


const client = new MongoClient(url);

try {
await [Link]();
[Link]('Connected
successfully to MongoDB');
const db = [Link](dbName);
// Operasi database dapat
dilakukan di sini
} catch (err) {
[Link](err);
} finally {
await [Link]();
}
})();

Jika menggunakan Mongoose, proses koneksi


menjadi lebih sederhana karena Mongoose menangani
banyak konfigurasi secara otomatis:
const mongoose = require('mongoose');

[Link]('mongodb://localhost:27
017/mydatabase', {
useNewUrlParser: true,
useUnifiedTopology: true,
})
.then(() => [Link]('Connected to
MongoDB with Mongoose'))
.catch((err) =>
[Link]('MongoDB connection error:',
err));

I 121
Pemrograman Web Framework dengan [Link]
Setelah koneksi berhasil, langkah selanjutnya
adalah melakukan operasi data seperti CRUD (Create,
Read, Update, Delete). Contoh berikut menunjukkan
bagaimana data dapat disimpan ke MongoDB
menggunakan Mongoose. Pertama, kita
mendefinisikan skema data:

const { Schema, model } = mongoose;

const userSchema = new Schema({


name: String,
email: String,
age: Number,
});

const User = model('User', userSchema);

Setelah skema dibuat, kita dapat menambahkan


data baru ke dalam koleksi MongoDB:
const newUser = new User({ name: 'John
Doe', email: 'john@[Link]', age: 30 });

[Link]()
.then(() => [Link]('User added
successfully'))
.catch((err) => [Link]('Error
adding user:', err));
Selain menyimpan data, kita juga dapat
membaca data dari MongoDB. Contohnya:
[Link]()

122 IPemrograman Web Framework dengan [Link]


.then((users) =>
[Link]('Users:', users))
.catch((err) => [Link]('Error
fetching users:', err));

Keunggulan MongoDB ketika digunakan dengan


[Link] adalah kemampuannya untuk menangani data
dengan kecepatan tinggi serta dukungan bawaan
untuk model asinkron. Pendekatan event-driven dan
non-blocking I/O dari [Link] sejalan dengan
MongoDB, yang mendukung operasi asinkron. Selain
itu, MongoDB dapat dengan mudah diintegrasikan
dengan framework seperti [Link], sehingga
mempermudah pembangunan API yang dapat
menangani data secara efisien.
C. Query Database dengan Mongoose
Mongoose adalah salah satu library populer
untuk [Link] yang digunakan dalam mengelola
database MongoDB. Sebagai Object Data Modeling
(ODM), Mongoose menyediakan pendekatan
terstruktur untuk bekerja dengan data di MongoDB.
Dengan Mongoose, kita dapat mendefinisikan skema
data, memvalidasi data, dan melakukan berbagai
operasi database seperti membaca, menambahkan,
memperbarui, dan menghapus data (CRUD).

I 123
Pemrograman Web Framework dengan [Link]
Keunggulan Mongoose terletak pada kemudahan
penggunaan dan fitur-fitur canggih yang mendukung
pengembangan aplikasi secara efisien.
Langkah pertama dalam menggunakan
Mongoose adalah mendefinisikan skema data. Skema
ini bertindak sebagai cetak biru yang menggambarkan
struktur data yang akan disimpan di MongoDB.
Misalnya, jika kita mengelola data pengguna, kita dapat
menentukan atribut seperti nama, email, dan usia.
Skema ini membantu memastikan bahwa data yang
disimpan memiliki format yang konsisten. Setelah
skema didefinisikan, kita membuat model
berdasarkan skema tersebut. Model ini
memungkinkan kita untuk berinteraksi langsung
dengan database, baik untuk menambahkan data baru
maupun melakukan operasi lainnya.
Operasi membaca data (read) adalah salah satu
fitur utama Mongoose. Kita dapat mengambil semua
data dalam koleksi tertentu, mencari data berdasarkan
kriteria tertentu, atau bahkan mengambil satu
dokumen spesifik menggunakan metode bawaan
seperti find() atau findOne(). Selain itu, Mongoose
mendukung pencarian berdasarkan ID unik dokumen,
yang sangat berguna saat kita membutuhkan data

124 IPemrograman Web Framework dengan [Link]


spesifik. Fitur ini memungkinkan pengelolaan data
secara fleksibel dan efisien (Azkarin et al., 2023).
Selain membaca data, Mongoose juga
mendukung penambahan data baru (create).
Pengguna dapat menambahkan dokumen baru ke
koleksi menggunakan metode sederhana. Fitur
validasi bawaan memastikan bahwa data yang
dimasukkan sesuai dengan skema yang telah
ditentukan sebelumnya. Dengan demikian, kesalahan
format data dapat diminimalkan, sehingga integritas
data tetap terjaga. Dalam aplikasi yang membutuhkan
banyak interaksi dengan pengguna, fitur ini sangat
membantu.
Untuk memperbarui data (update), Mongoose
menyediakan berbagai metode seperti updateOne()
atau findByIdAndUpdate(). Operasi ini mempermudah
kita dalam memperbarui dokumen yang sudah ada di
database, baik berdasarkan ID maupun kriteria
lainnya. Salah satu keunggulan Mongoose adalah
kemampuannya untuk mengembalikan versi terbaru
dari data setelah diperbarui, yang memudahkan
pengembang dalam memastikan data yang diperbarui
sudah benar.

I 125
Pemrograman Web Framework dengan [Link]
Menghapus data (delete) juga didukung dengan
baik oleh Mongoose. Kita dapat menghapus satu atau
beberapa dokumen berdasarkan kriteria tertentu, atau
langsung menghapus dokumen berdasarkan ID-nya.
Fitur ini berguna dalam menjaga database tetap bersih
dan hanya menyimpan data yang relevan. Operasi
penghapusan yang efisien memastikan bahwa kinerja
aplikasi tidak terganggu oleh data yang tidak
diperlukan.
Selain operasi dasar CRUD, Mongoose
mendukung fitur tambahan seperti pengurutan
(sorting), penyaringan (filtering), dan paginasi
(pagination). Dengan fitur ini, kita dapat mengatur
bagaimana data ditampilkan kepada pengguna.
Misalnya, data dapat diurutkan berdasarkan usia
secara menaik atau menurun, atau menampilkan data
dalam halaman tertentu untuk meningkatkan
pengalaman pengguna. Fitur-fitur ini sangat
membantu dalam membangun aplikasi web yang
responsif dan user-friendly.
Dengan pendekatan yang terstruktur, fitur
validasi bawaan, dan berbagai metode untuk
mengelola data, Mongoose mempermudah
pengembang dalam membangun aplikasi yang

126 IPemrograman Web Framework dengan [Link]


berbasis data. Dari operasi sederhana hingga
pengelolaan data yang kompleks, Mongoose
menawarkan solusi yang efisien dan dapat diandalkan
untuk kebutuhan pengembangan modern.

D. Validasi dan Relasi Data


Mongoose tidak hanya membantu dalam
manajemen data, tetapi juga menyediakan fitur
penting seperti validasi dan pengelolaan relasi data.
Validasi memastikan bahwa data yang dimasukkan ke
dalam database sesuai dengan aturan yang telah
ditentukan, sedangkan relasi membantu
menghubungkan data antar koleksi. Fitur ini sangat
penting dalam membangun aplikasi yang kompleks
dengan struktur data yang rapi dan dapat diandalkan.
Validasi data di Mongoose dilakukan melalui
skema yang telah didefinisikan. Kita dapat
menentukan tipe data (seperti string, angka, atau
boolean), batasan panjang, atau bahkan aturan khusus
seperti format email. Dengan adanya validasi ini, kita
dapat mencegah data yang tidak valid masuk ke dalam
database. Misalnya, untuk kolom email, kita bisa
memastikan bahwa data yang dimasukkan adalah
format email yang benar. Jika pengguna mencoba

I 127
Pemrograman Web Framework dengan [Link]
menyimpan data yang tidak memenuhi aturan
tersebut, Mongoose akan memberikan error sehingga
pengembang dapat menanganinya sebelum data
disimpan.
Selain validasi bawaan, Mongoose juga
mendukung validasi kustom. Validasi kustom
memungkinkan kita untuk membuat aturan spesifik
sesuai kebutuhan aplikasi. Sebagai contoh, kita dapat
membuat validasi untuk memastikan bahwa usia
pengguna adalah angka positif, atau nama pengguna
tidak mengandung karakter tertentu. Dengan validasi
kustom, pengembang memiliki kontrol penuh untuk
memastikan data tetap sesuai dengan logika bisnis
yang telah ditentukan.
Sementara itu, relasi data menjadi penting
dalam aplikasi yang memiliki lebih dari satu jenis
entitas. Dalam Mongoose, relasi data dapat dikelola
dengan cara mereferensikan dokumen dari satu
koleksi ke koleksi lainnya. Sebagai contoh, dalam
aplikasi e-commerce, kita mungkin memiliki koleksi
untuk pengguna dan produk. Setiap pesanan dapat
mereferensikan pengguna yang melakukan pembelian
serta produk yang dipesan. Relasi ini membantu

128 IPemrograman Web Framework dengan [Link]


mengorganisir data sehingga lebih mudah untuk
diakses dan dikelola.
Relasi data di MongoDB menggunakan
pendekatan referensi atau embedding. Dalam
pendekatan referensi, dokumen hanya menyimpan ID
dari dokumen lain yang terkait, sehingga data tetap
terpisah di koleksi masing-masing. Pendekatan ini
berguna jika kita ingin mengelola data secara
independen. Sebaliknya, embedding menggabungkan
data terkait langsung dalam satu dokumen, yang dapat
meningkatkan kecepatan akses data karena tidak
memerlukan pencarian tambahan di koleksi lain.
Keuntungan utama menggunakan relasi di
Mongoose adalah kemudahan dalam melakukan
populate. Dengan metode populate(), kita dapat
mengambil data dari koleksi yang direferensikan
secara otomatis. Misalnya, saat mengambil data
pesanan, kita bisa sekaligus mendapatkan informasi
pengguna dan produk terkait tanpa harus melakukan
beberapa query terpisah. Hal ini sangat memudahkan
pengembangan aplikasi yang membutuhkan
pengelolaan data terintegrasi.
Namun, ada beberapa hal yang perlu
diperhatikan dalam menggunakan relasi data. Jika

I 129
Pemrograman Web Framework dengan [Link]
relasi terlalu kompleks, performa aplikasi dapat
terpengaruh, terutama jika data yang terkait sangat
besar. Oleh karena itu, pengembang perlu merancang
struktur database dengan bijak, mempertimbangkan
kapan menggunakan referensi atau embedding
berdasarkan kebutuhan spesifik aplikasi.

130 IPemrograman Web Framework dengan [Link]


Bab 7: Autentikasi dan
Otorisasi
A. Konsep Dasar Autentikasi dan Otorisasi
Autentikasi dan otorisasi adalah dua konsep
kunci dalam keamanan aplikasi web modern.
Keduanya bekerja sama untuk melindungi sistem dari
akses yang tidak sah, meskipun memiliki peran dan
tujuan yang berbeda. Autentikasi berfokus pada
proses memverifikasi identitas pengguna, sedangkan
otorisasi berkaitan dengan pengaturan hak akses
pengguna terhadap sumber daya tertentu di dalam
aplikasi.
Autentikasi adalah langkah pertama dalam
memastikan bahwa pengguna yang mencoba
mengakses sistem adalah benar-benar mereka yang
mereka klaim. Proses ini biasanya melibatkan
kredensial seperti nama pengguna dan kata sandi, atau
bahkan teknologi yang lebih canggih seperti biometrik,
token keamanan, atau autentikasi dua faktor (2FA).
Dalam aplikasi web, autentikasi sering kali
diimplementasikan menggunakan protokol seperti
OAuth, OpenID Connect, atau JSON Web Token (JWT),

I 131
Pemrograman Web Framework dengan [Link]
yang memungkinkan integrasi keamanan yang
fleksibel dan aman.
Di sisi lain, otorisasi dilakukan setelah proses
autentikasi selesai. Ketika identitas pengguna telah
diverifikasi, otorisasi menentukan apa saja yang
diizinkan untuk dilakukan oleh pengguna tersebut.
Sebagai contoh, dalam sebuah sistem manajemen,
pengguna dengan peran admin mungkin memiliki
akses penuh untuk menambah, menghapus, atau
mengubah data, sementara pengguna biasa hanya
dapat melihat data tertentu. Otorisasi sering kali
berbasis pada peran (role-based access control/RBAC)
atau atribut tertentu (attribute-based access
control/ABAC).
Perbedaan utama antara autentikasi dan
otorisasi adalah bahwa autentikasi menjawab
pertanyaan "siapa Anda?", sedangkan otorisasi
menjawab pertanyaan "apa yang Anda boleh
lakukan?". Keduanya penting untuk memastikan
sistem tetap aman dan berjalan sesuai dengan aturan
yang telah ditetapkan oleh pengembang atau
administrator sistem.

132 IPemrograman Web Framework dengan [Link]


Dalam aplikasi [Link], autentikasi sering kali
dilakukan dengan menggunakan middleware seperti
[Link], yang mendukung berbagai strategi
autentikasi, seperti login berbasis database, OAuth,
atau autentikasi sosial dengan Google atau Facebook.
Sementara itu, otorisasi dapat diimplementasikan
menggunakan middleware kustom atau library pihak
ketiga yang memeriksa hak akses berdasarkan
informasi pengguna yang telah diautentikasi.
Salah satu tantangan utama dalam
mengimplementasikan autentikasi dan otorisasi
adalah menjaga keseimbangan antara keamanan dan
kenyamanan pengguna. Sistem yang terlalu ketat
dapat membuat pengguna merasa frustasi, sementara
sistem yang terlalu longgar dapat meningkatkan risiko
keamanan. Oleh karena itu, penting bagi pengembang
untuk merancang sistem yang tidak hanya aman tetapi
juga ramah pengguna.
Selain itu, penerapan autentikasi dan otorisasi
yang tepat juga sangat penting dalam konteks aplikasi
yang menggunakan API. API sering diakses oleh
berbagai klien, sehingga autentikasi dan otorisasi
harus dirancang dengan mempertimbangkan skenario

I 133
Pemrograman Web Framework dengan [Link]
seperti akses lintas platform atau keamanan token
yang digunakan dalam komunikasi.
Dengan memahami konsep dan perbedaannya,
serta mengimplementasikannya dengan alat dan
strategi yang tepat, pengembang dapat memastikan
bahwa hanya pengguna yang sah yang dapat
mengakses dan melakukan tindakan sesuai dengan
hak mereka dalam sistem.

B. Autentikasi Menggunakan JWT (JSON Web Token)


JSON Web Token (JWT) adalah standar terbuka
(RFC 7519) yang digunakan untuk berbagi informasi
secara aman antara klien dan server dalam bentuk
token. Dalam konteks autentikasi, JWT digunakan
untuk memverifikasi identitas pengguna dan
memberikan akses ke sumber daya tertentu dalam
aplikasi web. Penggunaan JWT memberikan cara yang
efisien dan aman untuk mengelola autentikasi tanpa
harus mempertahankan sesi pengguna di server.
JWT terdiri dari tiga bagian utama yang
dipisahkan oleh tanda titik (.): Header, Payload, dan
Signature. Header berisi tipe token, yaitu JWT, dan
algoritma enkripsi yang digunakan, seperti HMAC atau
RSA. Payload menyimpan klaim, yaitu data yang ingin

134 IPemrograman Web Framework dengan [Link]


dikirimkan, seperti ID pengguna atau peran pengguna.
Klaim ini bisa berupa klaim standar (seperti iss, exp,
dan sub) atau klaim kustom. Signature adalah hasil
enkripsi header dan payload menggunakan algoritma
yang ditentukan serta sebuah kunci rahasia, yang
memastikan integritas data dalam token.
Proses autentikasi menggunakan JWT dimulai
ketika pengguna login dengan kredensial seperti nama
pengguna dan kata sandi. Server memverifikasi
kredensial tersebut, dan jika valid, server membuat
token JWT yang menyimpan informasi pengguna dan
waktu kedaluwarsa token. Token ini dikirimkan
kembali ke klien, yang kemudian menyimpannya di
tempat yang aman, seperti local storage atau HTTP-
only cookies.
Ketika klien ingin mengakses sumber daya yang
dilindungi, token JWT disertakan dalam header
permintaan HTTP, biasanya dalam format Bearer
Token. Server akan memvalidasi token tersebut
dengan memeriksa tanda tangan dan memastikan
token belum kedaluwarsa. Jika token valid, server
mengizinkan akses ke sumber daya; jika tidak,
permintaan akan ditolak.

I 135
Pemrograman Web Framework dengan [Link]
JWT memiliki beberapa keunggulan dalam
autentikasi dibandingkan metode tradisional berbasis
sesi. Salah satunya adalah JWT bersifat stateless, yang
berarti server tidak perlu menyimpan data sesi
pengguna, sehingga mengurangi beban memori. Selain
itu, karena JWT dikirimkan dengan setiap permintaan,
autentikasi dapat dilakukan dengan mudah di
lingkungan cross-platform dan cross-domain, seperti
dalam API RESTful (Prayogi et al., 2020).
Namun, JWT juga memiliki beberapa tantangan.
Keamanan token sangat bergantung pada penggunaan
kunci rahasia yang kuat untuk menandatangani token.
Jika kunci rahasia ini bocor, pihak yang tidak
berwenang dapat membuat token palsu. Selain itu,
karena JWT memuat informasi pengguna dalam
bentuk base64, meskipun dienkripsi, data tetap bisa
didekode. Oleh karena itu, informasi sensitif tidak
boleh disimpan dalam token.
Selain itu, pengelolaan kedaluwarsa token
(expiration) sangat penting. Token yang sudah
kedaluwarsa tidak boleh digunakan kembali.
Pengembang sering kali menggunakan refresh token
untuk menghasilkan token baru tanpa memaksa
pengguna untuk login ulang secara manual.

136 IPemrograman Web Framework dengan [Link]


Pendekatan ini menjaga keseimbangan antara
keamanan dan pengalaman pengguna.
Dalam pengembangan aplikasi [Link], JWT
dapat diimplementasikan dengan bantuan pustaka
seperti jsonwebtoken. Proses pembuatan token dan
validasi cukup sederhana, sehingga memungkinkan
pengembang untuk menambahkan lapisan keamanan
yang kuat pada aplikasi mereka. Dengan menggunakan
JWT secara efektif, pengembang dapat memastikan
bahwa autentikasi pengguna tidak hanya aman tetapi
juga efisien dan fleksibel untuk mendukung berbagai
kebutuhan aplikasi modern.

C. Mengamankan Endpoint dengan JWT


Mengamankan endpoint dengan JSON Web
Token (JWT) adalah langkah penting untuk
memastikan bahwa hanya pengguna yang
terautentikasi dan berwenang dapat mengakses
sumber daya tertentu dalam sebuah aplikasi. Dalam
konteks aplikasi berbasis REST API, JWT sering
digunakan untuk melindungi endpoint tanpa
memerlukan sesi berbasis server, menjadikannya
pilihan yang efisien dan skalabel.

I 137
Pemrograman Web Framework dengan [Link]
Konsep dasarnya adalah dengan mewajibkan
klien menyertakan token JWT yang valid dalam setiap
permintaan ke endpoint yang dilindungi. Ketika server
menerima permintaan, token tersebut diverifikasi
untuk memastikan integritasnya, identitas pengguna,
dan izin akses. Jika valid, server mengizinkan
permintaan; jika tidak, server menolak akses.
Proses pengamanan dimulai dengan penyisipan
middleware autentikasi di server. Middleware ini
bertugas memeriksa keberadaan token di header
HTTP (biasanya di bawah header Authorization
dengan format Bearer Token). Setelah token
ditemukan, middleware akan memvalidasinya
menggunakan kunci rahasia atau kunci publik yang
sesuai dengan algoritma yang digunakan untuk
menandatangani token.
Jika validasi berhasil, informasi pengguna yang
terdapat dalam payload token (seperti ID pengguna
atau peran) dapat diteruskan ke fungsi berikutnya.
Misalnya, jika token menyertakan peran pengguna,
aplikasi dapat membatasi akses berdasarkan peran
tersebut. Sebaliknya, jika token tidak valid atau tidak
disertakan, middleware akan menghentikan proses

138 IPemrograman Web Framework dengan [Link]


dan mengembalikan respons error, seperti kode status
HTTP 401 Unauthorized atau 403 Forbidden.
Keamanan tambahan dapat diterapkan dengan
mengatur waktu kedaluwarsa token. Dalam JWT,
waktu kedaluwarsa biasanya diatur menggunakan
klaim exp di payload token. Server harus memeriksa
apakah token telah melewati waktu kedaluwarsa
sebelum memproses permintaan. Pendekatan ini
memastikan bahwa token tidak bisa digunakan dalam
jangka waktu yang lama, bahkan jika bocor ke pihak
ketiga.
Selain itu, pengembang juga harus
mempertimbangkan penggunaan refresh token untuk
mendukung sesi jangka panjang tanpa
memperpanjang masa berlaku token utama. Refresh
token biasanya disimpan secara aman di klien
(misalnya dalam HTTP-only cookies) dan hanya
digunakan untuk meminta token baru ketika token
lama sudah kedaluwarsa. Dengan pendekatan ini,
risiko penyalahgunaan token dapat diminimalkan.
Dalam implementasi [Link], pustaka seperti
jsonwebtoken sering digunakan untuk memvalidasi
token. Sementara itu, framework seperti [Link]
memudahkan integrasi middleware untuk

I 139
Pemrograman Web Framework dengan [Link]
mengamankan endpoint. Sebagai contoh, sebuah
middleware dapat dibuat untuk mengekstrak dan
memvalidasi token, lalu diterapkan pada endpoint
yang memerlukan autentikasi.
Namun, pengamanan endpoint dengan JWT juga
memiliki tantangan. Salah satunya adalah memastikan
bahwa token hanya dapat digunakan dalam konteks
yang sah. Untuk itu, pengembang dapat menambahkan
klaim tambahan dalam token, seperti alamat IP
pengguna atau ID perangkat, dan memvalidasinya di
setiap permintaan. Dengan implementasi yang tepat,
pengembang dapat melindungi aplikasi mereka dari
akses yang tidak sah, sekaligus memberikan
pengalaman pengguna yang baik tanpa perlu memuat
ulang sesi secara berulang. Hal ini membuat JWT
menjadi pilihan utama dalam pengembangan aplikasi
web modern.

D. Otorisasi Berdasarkan Role dan Permission


Otorisasi berbasis role dan permission adalah
pendekatan penting dalam pengamanan aplikasi web.
Setelah pengguna berhasil diautentikasi, langkah
berikutnya adalah memastikan bahwa mereka hanya
dapat mengakses sumber daya atau melakukan

140 IPemrograman Web Framework dengan [Link]


tindakan yang sesuai dengan peran (role) atau izin
(permission) yang mereka miliki. Pendekatan ini
membantu menjaga keamanan aplikasi dan
membatasi akses ke fitur atau data sensitif
berdasarkan hierarki atau tanggung jawab pengguna.
Pada dasarnya, role adalah kategori atau grup
yang diberikan kepada pengguna, seperti "admin,"
"editor," atau "user biasa." Setiap role memiliki
seperangkat permission yang mendefinisikan apa
yang boleh dilakukan oleh pengguna dengan role
tersebut. Sebagai contoh, seorang admin mungkin
memiliki izin untuk membuat, mengedit, dan
menghapus data, sedangkan pengguna biasa hanya
dapat membaca data.
Implementasi otorisasi berbasis role biasanya
dimulai dengan menyimpan informasi role dan
permission di dalam token JWT. Saat token dibuat
setelah autentikasi, role atau permission pengguna
dapat dimasukkan ke dalam payload token. Informasi
ini akan digunakan oleh server untuk memverifikasi
apakah pengguna memiliki izin yang diperlukan untuk
mengakses endpoint tertentu.
Ketika pengguna mengirimkan permintaan ke
endpoint yang dilindungi, middleware otorisasi akan

I 141
Pemrograman Web Framework dengan [Link]
memeriksa token untuk melihat role atau permission
yang terkait. Middleware ini kemudian
membandingkan informasi tersebut dengan aturan
akses untuk endpoint tersebut. Jika pengguna memiliki
izin yang sesuai, middleware akan mengizinkan akses.
Jika tidak, respons akan diberikan dengan kode status
HTTP seperti 403 Forbidden.
Pendekatan berbasis role lebih sederhana dan
cocok untuk aplikasi dengan struktur akses yang tidak
terlalu kompleks. Namun, dalam aplikasi yang
membutuhkan kontrol akses lebih rinci, pendekatan
berbasis permission sering lebih efektif. Dalam
pendekatan ini, setiap tindakan atau sumber daya
memiliki izin spesifik, dan pengguna diberikan satu
atau lebih izin sesuai kebutuhan. Sebagai contoh, izin
dapat berupa "read_articles," "create_articles," atau
"delete_users."
Framework seperti [Link] memudahkan
penerapan otorisasi berbasis role dan permission.
Middleware dapat dibuat untuk memeriksa role atau
permission sebelum melanjutkan ke fungsi utama.
Selain itu, pustaka seperti casl atau rbac (Role-Based
Access Control) dapat digunakan untuk membantu
mengelola logika otorisasi yang kompleks.

142 IPemrograman Web Framework dengan [Link]


Dalam implementasi otorisasi, penting untuk
memisahkan antara autentikasi dan otorisasi.
Autentikasi memastikan bahwa pengguna adalah siapa
yang mereka klaim, sedangkan otorisasi memastikan
bahwa pengguna memiliki izin untuk melakukan
tindakan tertentu. Pendekatan ini membantu menjaga
modularitas dan keamanan aplikasi.
Tantangan utama dalam otorisasi berbasis role
dan permission adalah menjaga aturan akses tetap
sederhana dan mudah dikelola, terutama dalam
aplikasi berskala besar. Terlalu banyak role atau
permission dapat menyebabkan kerumitan, sehingga
pengembang perlu merancang hierarki akses dengan
cermat.
Kesimpulannya, otorisasi berbasis role dan
permission adalah komponen kunci dalam
pengamanan aplikasi web modern. Dengan
implementasi yang baik, pendekatan ini tidak hanya
meningkatkan keamanan aplikasi tetapi juga
memastikan bahwa pengguna mendapatkan
pengalaman yang relevan dan terarah berdasarkan
peran atau izin mereka. Hal ini membantu
menciptakan aplikasi yang lebih aman, efisien, dan
terstruktur dengan baik.

I 143
Pemrograman Web Framework dengan [Link]
Bab 8 : Pemeliharaan dan
Skala Aplikasi [Link]
A. Pengujian Aplikasi
Pengujian aplikasi merupakan langkah krusial
dalam proses pengembangan perangkat lunak yang
bertujuan untuk memastikan bahwa aplikasi yang
dikembangkan berfungsi dengan baik sesuai dengan
yang diharapkan. Pengujian ini dilakukan untuk
menemukan dan memperbaiki bug, kesalahan, dan
kekurangan dalam aplikasi sebelum aplikasi dirilis
untuk digunakan oleh pengguna. Dalam pengujian
aplikasi, ada berbagai jenis pengujian yang dilakukan,
mulai dari pengujian fungsional, performa, hingga
keamanan. Setiap jenis pengujian ini memiliki tujuan
dan fokus yang berbeda, namun semuanya bertujuan
untuk memastikan aplikasi dapat berjalan optimal dan
bebas dari masalah yang dapat mengganggu
pengalaman pengguna (Capel, 2023).
Pada umumnya, pengujian aplikasi dilakukan
dalam beberapa tahap, dimulai dengan pengujian unit
yang menguji bagian terkecil dari aplikasi, seperti
fungsi atau metode dalam kode sumber. Setelah itu,

144 IPemrograman Web Framework dengan [Link]


pengujian integrasi dilakukan untuk memeriksa
apakah bagian-bagian tersebut bekerja dengan baik
ketika digabungkan. Kemudian, pengujian fungsional
dilakukan untuk memastikan bahwa aplikasi berfungsi
sesuai dengan spesifikasi yang diinginkan dan
memenuhi kebutuhan pengguna. Pengujian ini fokus
pada pengujian fitur atau fungsi utama aplikasi.
Setelah pengujian fungsional, tahap berikutnya
adalah pengujian performa untuk mengevaluasi
seberapa baik aplikasi bekerja di bawah berbagai
kondisi, termasuk beban tinggi dan stres. Pengujian ini
bertujuan untuk memeriksa apakah aplikasi dapat
menangani jumlah pengguna yang besar atau
permintaan yang sangat intensif tanpa mengalami
penurunan kinerja yang signifikan. Selain itu,
pengujian keamanan juga dilakukan untuk
memastikan aplikasi tahan terhadap ancaman atau
celah keamanan yang bisa dimanfaatkan oleh pihak
yang tidak bertanggung jawab. Pengujian ini
melibatkan analisis terhadap potensi kebocoran data
atau eksploitasi sistem.
Selanjutnya, pengujian antarmuka pengguna
(UI) penting untuk memastikan bahwa aplikasi
memiliki antarmuka yang intuitif, mudah digunakan,

I 145
Pemrograman Web Framework dengan [Link]
dan sesuai dengan desain yang diinginkan. Pengujian
ini melibatkan pengujian terhadap navigasi, desain
visual, serta interaksi pengguna dengan aplikasi. Selain
itu, pengujian kompatibilitas dilakukan untuk
memverifikasi bahwa aplikasi dapat berjalan dengan
baik di berbagai platform, perangkat keras, dan sistem
operasi yang berbeda, termasuk perangkat mobile dan
desktop.
Pentingnya pengujian aplikasi juga mencakup
pengujian regresi, yang dilakukan setiap kali aplikasi
diperbarui atau dimodifikasi. Pengujian ini bertujuan
untuk memastikan bahwa fitur-fitur yang sudah ada
tidak rusak atau terganggu akibat perubahan yang
dilakukan pada bagian lain aplikasi. Pengujian regresi
juga membantu menjaga kestabilan aplikasi dalam
jangka panjang.
Selain pengujian manual, pengujian aplikasi juga
bisa dilakukan secara otomatis dengan menggunakan
alat dan kerangka kerja (framework) yang mendukung
pengujian otomatis. Pengujian otomatis
memungkinkan pengujian dilakukan dengan lebih
cepat dan efisien, serta dapat diulang berkali-kali
tanpa intervensi manusia. Beberapa alat otomatis yang
sering digunakan antara lain Selenium, Jest, dan

146 IPemrograman Web Framework dengan [Link]


Mocha, yang mendukung pengujian aplikasi berbasis
web maupun mobile.
Agar pengujian lebih efektif, pengembang
aplikasi sering kali mengadopsi metodologi
pengembangan perangkat lunak tertentu, seperti Agile
atau DevOps, yang mengintegrasikan pengujian secara
terus-menerus selama proses pengembangan. Dengan
pendekatan ini, pengujian tidak hanya dilakukan di
akhir siklus pengembangan, tetapi juga selama setiap
iterasi atau sprint pengembangan. Hal ini
memungkinkan tim pengembang untuk mendeteksi
dan memperbaiki masalah lebih cepat.
Melalui pengujian yang menyeluruh dan
terencana dengan baik, aplikasi dapat dirilis dengan
tingkat kualitas yang tinggi, meminimalkan
kemungkinan kesalahan atau kerusakan setelah
peluncuran, serta memberikan pengalaman yang lebih
baik bagi penggunanya. Pengujian yang tepat akan
membantu memastikan bahwa aplikasi tidak hanya
berfungsi dengan baik tetapi juga aman, efisien, dan
memenuhi kebutuhan pengguna.

I 147
Pemrograman Web Framework dengan [Link]
B. Debugging Aplikasi
Debugging adalah proses mencari, menganalisis,
dan memperbaiki kesalahan atau bugs yang ada dalam
sebuah aplikasi. Setiap aplikasi yang dikembangkan,
baik itu aplikasi web, desktop, atau mobile, tidak lepas
dari kemungkinan adanya kesalahan dalam kode yang
menyebabkan aplikasi tidak berfungsi sebagaimana
mestinya. Oleh karena itu, debugging menjadi tahap
yang sangat penting dalam siklus pengembangan
perangkat lunak. Tanpa proses debugging yang baik,
aplikasi berisiko mengalami gangguan fungsionalitas,
kerusakan, atau bahkan kerentanannya terhadap
ancaman keamanan.
Proses debugging dimulai dengan identifikasi
masalah. Kesalahan atau bug bisa ditemukan melalui
berbagai metode, seperti laporan dari pengguna, hasil
pengujian aplikasi, atau melalui monitoring performa
aplikasi di lingkungan produksi. Dalam banyak kasus,
pengembang perlu memanfaatkan pesan kesalahan
atau log yang dihasilkan oleh aplikasi untuk
mengetahui penyebab masalah. Kesalahan bisa terjadi
di berbagai bagian aplikasi, mulai dari bug sintaksis,
kesalahan logika, hingga masalah terkait integrasi
dengan sistem lain.

148 IPemrograman Web Framework dengan [Link]


Setelah masalah teridentifikasi, langkah
selanjutnya adalah menganalisis bagian kode yang
terlibat dalam bug tersebut. Pengembang akan
mencoba memahami penyebab kesalahan dengan
memeriksa logika aplikasi dan alur kode yang
menyebabkan masalah. Dalam beberapa kasus,
masalah mungkin terletak pada konfigurasi atau
pengaturan sistem yang tidak tepat, sehingga
debugging juga mencakup analisis terhadap
konfigurasi lingkungan pengembangan dan produksi.
Untuk mempermudah debugging, pengembang
dapat menggunakan alat debugging yang disediakan
oleh lingkungan pengembangan atau integrated
development environment (IDE). Alat ini biasanya
memungkinkan pengembang untuk melacak alur
eksekusi kode secara langsung, memeriksa nilai
variabel, atau menghentikan eksekusi kode di titik
tertentu menggunakan breakpoint. Dengan cara ini,
pengembang dapat memahami lebih baik bagaimana
aplikasi berjalan dan di mana kesalahan terjadi.
Selain menggunakan alat debugging di IDE,
pengembang sering kali menggunakan teknik
[Link] atau metode pencetakan informasi lainnya
untuk memantau jalannya aplikasi. Teknik ini sangat

I 149
Pemrograman Web Framework dengan [Link]
berguna untuk memeriksa nilai variabel atau
memastikan bahwa bagian-bagian aplikasi berjalan
dengan benar. Meskipun demikian, penggunaan
metode ini dapat mengurangi efisiensi pengembangan
karena memerlukan intervensi manual dan dapat
menambah kebisingan pada log aplikasi.
Setelah menemukan dan memperbaiki bug,
tahap berikutnya dalam debugging adalah pengujian
kembali untuk memastikan bahwa masalah telah
teratasi dan bahwa perbaikan tersebut tidak
menyebabkan masalah baru. Hal ini biasanya
dilakukan dengan menjalankan aplikasi melalui
serangkaian pengujian, baik pengujian otomatis
maupun manual, untuk memverifikasi bahwa aplikasi
berfungsi sesuai dengan harapan. Pengujian regresi
juga sangat penting pada tahap ini untuk memastikan
bahwa perbaikan bug tidak mempengaruhi
fungsionalitas aplikasi lainnya.
Selain itu, debugging juga merupakan proses
berkelanjutan, di mana pengembang akan terus
memperbaiki dan menyempurnakan aplikasi dengan
memperbaiki bug yang ditemukan seiring berjalannya
waktu. Bahkan setelah aplikasi dirilis, tim
pengembang harus siap untuk melakukan perbaikan

150 IPemrograman Web Framework dengan [Link]


jika ada masalah yang muncul di lingkungan produksi.
Oleh karena itu, penggunaan alat pelaporan bug atau
issue tracking system menjadi sangat penting untuk
melacak masalah yang perlu diselesaikan.
Pada akhirnya, debugging adalah bagian yang
tidak terpisahkan dari pengembangan perangkat
lunak. Ini adalah keterampilan yang sangat penting
bagi pengembang untuk mengidentifikasi dan
memperbaiki masalah yang muncul dalam aplikasi.
Melalui proses debugging yang cermat dan terstruktur,
aplikasi dapat mencapai kualitas yang lebih baik dan
dapat diandalkan, serta memastikan pengalaman
pengguna yang lebih baik dan lebih lancar.

C. Optimasi Kinerja
Optimasi kinerja aplikasi adalah proses yang
dilakukan untuk meningkatkan efisiensi dan
kecepatan aplikasi agar dapat beroperasi lebih cepat,
lebih responsif, dan lebih efisien dalam penggunaan
sumber daya, seperti memori dan daya pemrosesan. Di
era digital saat ini, pengguna sangat mengharapkan
aplikasi yang dapat memberikan pengalaman yang
cepat dan responsif. Aplikasi yang lambat atau tidak
efisien dapat menurunkan kepuasan pengguna dan

I 151
Pemrograman Web Framework dengan [Link]
menyebabkan mereka beralih ke aplikasi pesaing. Oleh
karena itu, optimasi kinerja menjadi salah satu langkah
penting dalam pengembangan aplikasi.
Salah satu aspek pertama yang perlu
diperhatikan dalam optimasi kinerja adalah waktu
respons. Aplikasi harus dapat merespon permintaan
pengguna dengan cepat, baik itu dalam aplikasi
berbasis web, mobile, atau desktop. Hal ini mencakup
pengurangan latensi dalam proses pengambilan data,
pengolahan data, serta rendering antarmuka
pengguna. Waktu respons yang tinggi sering kali
disebabkan oleh masalah dalam desain arsitektur
aplikasi atau kode yang tidak efisien. Oleh karena itu,
pengembang perlu menganalisis dan mengoptimalkan
bagian-bagian aplikasi yang dapat menambah beban
pada sistem.
Selain itu, pengelolaan memori juga menjadi
perhatian utama dalam optimasi kinerja. Aplikasi yang
memerlukan penggunaan memori yang besar atau
tidak efisien dalam mengelola memori dapat
menyebabkan aplikasi berjalan lambat atau bahkan
mengalami crash. Salah satu cara untuk mengatasi
masalah ini adalah dengan melakukan manajemen
memori yang baik, termasuk pembersihan atau

152 IPemrograman Web Framework dengan [Link]


penghapusan objek yang tidak lagi dibutuhkan oleh
aplikasi. Penggunaan alat seperti profiling tools dapat
membantu mengidentifikasi masalah penggunaan
memori dan memberikan wawasan tentang
bagaimana cara memperbaikinya.
Pengoptimalan kueri database juga merupakan
salah satu elemen penting dalam meningkatkan
kinerja aplikasi, terutama pada aplikasi yang
bergantung pada database untuk menyimpan dan
mengambil data. Penggunaan kueri yang tidak efisien
dapat memperlambat aplikasi, terutama ketika
berhadapan dengan volume data yang besar. Oleh
karena itu, pengembang perlu memastikan bahwa
kueri yang digunakan dioptimalkan dengan benar,
menggunakan indeks yang sesuai, dan menghindari
kueri yang kompleks atau berlebihan yang dapat
mengakibatkan waktu tunggu yang lama.
Selanjutnya, dalam konteks aplikasi web,
pengoptimalan pemuatan halaman atau page load
optimization juga sangat penting. Pengguna sering kali
menilai kualitas aplikasi atau situs web berdasarkan
seberapa cepat halaman dapat dimuat. Untuk
mengoptimalkan pemuatan halaman, pengembang
dapat memanfaatkan teknik seperti lazy loading untuk

I 153
Pemrograman Web Framework dengan [Link]
menunda pemuatan elemen-elemen yang tidak
langsung terlihat oleh pengguna, serta meminimalkan
penggunaan elemen berat seperti gambar beresolusi
tinggi atau skrip eksternal yang memperlambat waktu
pemuatan.
Caching juga memainkan peran penting dalam
optimasi kinerja aplikasi. Dengan menggunakan cache,
aplikasi dapat menyimpan data yang sering diakses
agar dapat diambil dengan lebih cepat tanpa perlu
mengakses sumber data yang sama berulang kali. Ini
mengurangi beban pada server dan mempercepat
waktu respons aplikasi. Penggunaan cache yang tepat
dapat secara signifikan mengurangi waktu tunggu
pengguna dan mengoptimalkan penggunaan sumber
daya, baik itu di sisi server maupun di sisi klien
(Cosgaya Capel, 2023).
Selain itu, pengoptimalkan penggunaan jaringan
juga penting untuk meningkatkan kinerja aplikasi.
Aplikasi yang bergantung pada komunikasi melalui
jaringan, seperti aplikasi berbasis web atau mobile,
sering kali terpengaruh oleh latensi jaringan dan
kecepatan transfer data. Penggunaan kompresi data
atau teknik pengurangan ukuran file dapat membantu
mengurangi waktu transfer data dan mempercepat

154 IPemrograman Web Framework dengan [Link]


respons aplikasi, terutama saat berinteraksi dengan
server atau sumber daya eksternal.
Dalam pengembangan aplikasi, optimasi kinerja
adalah sebuah siklus berkelanjutan. Setelah
implementasi teknik-teknik optimasi, penting untuk
melakukan pengujian kinerja untuk mengevaluasi
efektivitas optimasi yang telah dilakukan. Alat seperti
load testing, stress testing, dan benchmarking dapat
digunakan untuk mengukur kinerja aplikasi dalam
berbagai skenario. Berdasarkan hasil pengujian ini,
pengembang dapat terus melakukan perbaikan lebih
lanjut untuk memastikan aplikasi tetap berjalan
dengan optimal.

D. Keamanan Aplikasi
Keamanan aplikasi adalah aspek penting dalam
pengembangan perangkat lunak yang tidak dapat
diabaikan. Setiap aplikasi, baik itu aplikasi web,
mobile, atau desktop, berisiko menjadi target potensi
ancaman yang dapat merusak integritas, kerahasiaan,
dan ketersediaan data. Ancaman ini bisa datang dari
berbagai sumber, mulai dari hacker yang mencoba
mengeksploitasi celah keamanan hingga kesalahan
pengembang yang tidak memperhatikan aspek

I 155
Pemrograman Web Framework dengan [Link]
pengamanan aplikasi. Oleh karena itu, penting bagi
pengembang untuk memahami prinsip dasar
keamanan aplikasi dan bagaimana cara melindungi
aplikasi dari potensi ancaman tersebut.
Salah satu ancaman terbesar yang dihadapi
aplikasi adalah serangan injeksi, seperti SQL injection,
yang memungkinkan penyerang menyisipkan kode
berbahaya ke dalam aplikasi yang dapat mengakses
atau memanipulasi data sensitif. Untuk menghindari
serangan ini, pengembang harus selalu menggunakan
teknik pengkodean yang aman, seperti menggunakan
pernyataan yang dipersiapkan (prepared statements)
dan menghindari penyisipan input pengguna langsung
ke dalam kueri database. Penggunaan ORM (Object-
Relational Mapping) yang memiliki built-in proteksi
terhadap injeksi SQL juga sangat disarankan untuk
meningkatkan keamanan aplikasi.
Autentikasi dan otorisasi adalah dua komponen
kunci dalam menjaga akses yang sah ke aplikasi.
Autentikasi memastikan bahwa pengguna yang
mencoba mengakses aplikasi adalah orang yang
mereka klaim, sementara otorisasi memastikan bahwa
pengguna hanya dapat mengakses sumber daya yang
mereka berhak. Salah satu metode yang umum

156 IPemrograman Web Framework dengan [Link]


digunakan untuk autentikasi adalah menggunakan
JWT (JSON Web Token), yang memungkinkan aplikasi
untuk mengotentikasi dan mengelola sesi pengguna
dengan aman. Selain itu, penting untuk membatasi
akses berdasarkan hak dan peran pengguna, serta
memastikan penggunaan teknik enkripsi yang kuat
untuk menyimpan data sensitif, seperti kata sandi,
dalam basis data.
Keamanan data dalam aplikasi juga sangat
bergantung pada penggunaan enkripsi. Data yang
dikirimkan antara server dan klien harus dilindungi
dengan enkripsi yang kuat untuk mencegah
penyadapan atau manipulasi oleh pihak yang tidak
berwenang. Penggunaan protokol HTTPS (HyperText
Transfer Protocol Secure) adalah standar yang harus
diterapkan dalam aplikasi web untuk mengenkripsi
data yang ditransfer melalui jaringan. Selain itu, data
yang disimpan di server juga harus dienkripsi dengan
metode yang aman, baik itu menggunakan enkripsi
simetris atau asimetris, tergantung pada jenis data
yang disimpan dan kebijakan perusahaan.
Selain perlindungan terhadap data, pengembang
juga harus memperhatikan keamanan input pengguna.
Setiap input yang diterima dari pengguna harus

I 157
Pemrograman Web Framework dengan [Link]
diperlakukan dengan hati-hati untuk mencegah
serangan seperti Cross-Site Scripting (XSS), di mana
penyerang mencoba menyuntikkan skrip berbahaya
ke dalam halaman web yang kemudian dijalankan oleh
browser pengguna lain. Untuk mengatasi masalah ini,
pengembang harus selalu memvalidasi dan
membersihkan data input dari pengguna dengan
menggunakan teknik sanitasi dan escaping yang tepat
sebelum menampilkannya di antarmuka pengguna.
Keamanan aplikasi juga mencakup pengelolaan
session dan cookie yang aman. Cookie yang digunakan
untuk menyimpan informasi sesi pengguna harus
dilindungi dengan atribut keamanan yang tepat,
seperti HttpOnly, Secure, dan SameSite, untuk
mencegah penyalahgunaan atau pencurian cookie.
Penggunaan session yang aman juga mencakup
pengaturan masa berlaku sesi yang tepat, pembaruan
ID sesi secara berkala, dan penghapusan sesi yang
tidak aktif untuk mengurangi risiko serangan
pembajakan sesi.
Selain itu, pengembang perlu melakukan
pengujian keamanan secara berkala untuk
mengidentifikasi potensi celah atau kerentanannya.
Pengujian ini bisa dilakukan dengan teknik

158 IPemrograman Web Framework dengan [Link]


penetration testing atau menggunakan alat pemindai
kerentanan untuk menganalisis aplikasi dari
perspektif penyerang dan mencari celah yang mungkin
ada. Pengujian ini membantu pengembang untuk
memahami di mana titik lemah aplikasi berada dan
mengambil langkah-langkah perbaikan yang
diperlukan sebelum aplikasi dirilis ke publik.
Akhirnya, penting untuk menyadari bahwa
keamanan aplikasi adalah tanggung jawab bersama
antara pengembang, administrator sistem, dan
pengguna. Pengembang harus membangun aplikasi
dengan mengikuti praktik terbaik dalam hal
keamanan, sementara administrator sistem
bertanggung jawab untuk memastikan server dan
infrastruktur tetap aman. Pengguna, di sisi lain, harus
diberi pendidikan tentang pentingnya menjaga
informasi pribadi mereka, seperti menggunakan kata
sandi yang kuat dan tidak membagikan kredensial
mereka kepada pihak lain.

E. Deploy Aplikasi
Deploy aplikasi adalah proses penting dalam
siklus pengembangan perangkat lunak yang mengarah
pada peluncuran aplikasi ke lingkungan produksi, di

I 159
Pemrograman Web Framework dengan [Link]
mana aplikasi siap digunakan oleh pengguna akhir.
Proses ini mencakup langkah-langkah dari
memindahkan kode yang sudah dikembangkan dan
diuji ke server atau platform cloud, hingga memastikan
aplikasi berjalan dengan baik dan stabil dalam
lingkungan tersebut. Deploy yang sukses
membutuhkan pemahaman yang baik tentang
infrastruktur dan alat-alat yang digunakan untuk
menyebarkan aplikasi, serta strategi untuk menangani
masalah yang muncul setelah aplikasi berjalan di
lingkungan produksi.
Sebelum melakukan deploy, langkah pertama
adalah memastikan aplikasi telah melewati berbagai
tahap pengujian, termasuk pengujian fungsional,
pengujian beban, dan pengujian keamanan. Aplikasi
yang sudah diuji dengan baik lebih mungkin untuk
berfungsi dengan lancar dan memberikan pengalaman
pengguna yang memuaskan. Selain itu, sangat penting
untuk memeriksa konfigurasi aplikasi, seperti
pengaturan variabel lingkungan, konfigurasi database,
dan integrasi dengan layanan eksternal agar aplikasi
dapat berfungsi dengan baik di server produksi.
Setelah aplikasi siap untuk deploy, pemilihan
platform hosting atau infrastruktur cloud yang tepat

160 IPemrograman Web Framework dengan [Link]


menjadi langkah berikutnya. Beberapa platform yang
umum digunakan untuk deploy aplikasi web adalah
Heroku, AWS (Amazon Web Services), Google Cloud
Platform, dan Microsoft Azure. Platform-platform ini
menyediakan berbagai layanan seperti server,
database, dan alat monitoring yang dapat mendukung
aplikasi agar tetap berjalan dengan optimal.
Pengembang juga dapat memilih untuk menggunakan
Virtual Private Server (VPS) atau layanan Docker
container jika ingin memiliki lebih banyak kontrol atas
infrastruktur mereka.
Salah satu aspek penting dalam proses deploy
adalah otomatisasi. Alat seperti CI/CD (Continuous
Integration/Continuous Deployment) memungkinkan
pengembang untuk secara otomatis membangun,
menguji, dan mendistribusikan aplikasi setelah setiap
perubahan kode dilakukan. Dengan menggunakan alat
seperti Jenkins, GitLab CI, atau GitHub Actions, proses
deploy menjadi lebih cepat, lebih andal, dan lebih
sedikit melibatkan campur tangan manusia, yang
mengurangi potensi kesalahan.
Docker adalah salah satu alat yang populer
dalam proses deploy modern karena kemampuannya
untuk mengemas aplikasi beserta seluruh

I 161
Pemrograman Web Framework dengan [Link]
dependensinya dalam sebuah container. Dengan
Docker, aplikasi dapat dijalankan di lingkungan yang
konsisten di seluruh tahap pengembangan dan
produksi, memastikan bahwa tidak ada masalah
perbedaan konfigurasi antara lingkungan
pengembangan dan produksi. Penggunaan Docker
juga memungkinkan pengembang untuk mengelola
beberapa versi aplikasi dengan lebih mudah,
mengurangi potensi masalah kompatibilitas.
Setelah aplikasi berhasil dideploy, monitoring
dan logging sangat diperlukan untuk memastikan
aplikasi berjalan dengan baik di lingkungan produksi.
Alat seperti New Relic, Datadog, atau Prometheus
dapat digunakan untuk memantau kinerja aplikasi
secara real-time. Penggunaan alat logging seperti
Winston atau Log4js juga penting untuk melacak
setiap masalah atau error yang muncul saat aplikasi
digunakan oleh pengguna. Monitoring dan logging
memungkinkan pengembang untuk mendeteksi dan
memperbaiki masalah dengan cepat, mengurangi
waktu downtime dan meningkatkan pengalaman
pengguna.
Dalam proses deploy aplikasi, penting juga
untuk mempertimbangkan scalability atau

162 IPemrograman Web Framework dengan [Link]


kemampuan aplikasi untuk menangani beban yang
meningkat seiring waktu. Platform cloud modern
menyediakan kemampuan autoscaling, di mana
aplikasi dapat secara otomatis menambah atau
mengurangi sumber daya sesuai dengan jumlah traffic
yang masuk. Hal ini memastikan bahwa aplikasi tetap
responsif dan dapat menangani lonjakan pengguna
tanpa downtime atau penurunan kinerja.
Langkah terakhir dalam deploy aplikasi adalah
melakukan maintenance dan pembaruan berkala.
Aplikasi perlu diperbarui secara rutin untuk
menambahkan fitur baru, memperbaiki bug, dan
menjaga keamanannya. Proses pembaruan juga harus
dilakukan dengan hati-hati untuk menghindari
gangguan pada layanan yang sudah ada. Oleh karena
itu, pengembang sering menggunakan teknik seperti
blue-green deployment atau canary deployment untuk
menguji pembaruan pada sebagian kecil pengguna
sebelum di-roll out secara penuh ke seluruh pengguna.
Keberhasilan dalam deploy tidak hanya
bergantung pada alat dan platform yang digunakan,
tetapi juga pada persiapan yang matang, pengujian
yang menyeluruh, dan pemantauan yang
berkelanjutan. Dengan perhatian yang tepat pada

I 163
Pemrograman Web Framework dengan [Link]
detail dalam setiap langkah, aplikasi dapat mencapai
stabilitas dan performa yang optimal di lingkungan
produksi.

164 IPemrograman Web Framework dengan [Link]


Daftar Pustaka
Amirulloh, I., Pertiwi, M. W., & Wibisono, T. (2024).
RANCANG BANGUN CHATBOT WHATSAPP
MENGGUNAKAN NODE JS DAN MODEL NATURAL
LANGUANGE PROCESSING UNTUK LAYANAN PPDB
SMK YPC TASIKMALAYA. Jurnal Informatika Dan
Teknik Elektro Terapan, 12(1).
Azkarin, V., Guntara, R. G., & Herdiana, O. (2023).
Development of a REST API for Human Resource
Information System for Employee Referral
Management Domain Using the Express JS
Framework and Node. js. Journal of Scientific
Research, Education, and Technology (JSRET), 2(3),
1085–1094.
Capel, M. C. (2023). Creation of a middleware for
blockchain interaction based on NestJS.
Chinthanet, B., Reid, B., Treude, C., Wagner, M., Kula, R. G.,
Ishio, T., & Matsumoto, K. (2021). What makes a good
Node. js package? Investigating Users, Contributors,
and Runnability. ArXiv Preprint ArXiv:2106.12239.
Cosgaya Capel, M. (2023). Creation of a middleware for
blockchain interaction based on NestJS. Universitat
Politècnica de Catalunya.

I 165
Pemrograman Web Framework dengan [Link]
Demashov, D., & Gosudarev, I. (2020). Node. js Frameworks
Performance Comparison.
Faqih, A. S., & Wahyudi, A. D. (2022). Rancang Bangun
Sistem Informasi Penjualan Berbasis Web (Studi
Kasus: Matchmaker). Jurnal Teknologi Dan Sistem
Informasi, 3(2).
Herron, D. (2020). Node. js Web Development: Server-side
web development made easy with Node 14 using
practical examples. Packt Publishing Ltd.
Huang, X. (2020). Research and application of Node. js
Core Technology. 2020 International Conference on
Intelligent Computing and Human-Computer
Interaction (ICHCI), 1–4.
MASKANDAR, J. (2024). IMPLEMENTASI SISTEM
PENGENALAN RATING TOKO EMAS BERBASIS WEB
MENGGUNAKAN REACTJS DAN NODE JS SEBAGAI
BACK-END. Universitas Teknologi Digital Indonesia.
Nielsen, B. B., Torp, M. T., & Møller, A. (2021). Modular call
graph construction for security scanning of node. js
applications. Proceedings of the 30th ACM SIGSOFT
International Symposium on Software Testing and
Analysis, 29–41.
Odeniran, Q., Wimmer, H., & Rebman, C. (2023). Node. js or
PhP? Determining the better website server backend

166 IPemrograman Web Framework dengan [Link]


scripting language. Issues in Information Systems,
24(1), 328.
Prayogi, A. A., Niswar, M., & Rijal, M. (2020). Design and
implementation of REST API for academic
information system. IOP Conference Series: Materials
Science and Engineering, 875(1), 12047.
Reid, B., d’Amorim, M., Wagner, M., & Treude, C. (2023).
NCQ: code reuse support for Node. js developers. IEEE
Transactions on Software Engineering, 49(5), 3205–
3225.
REID, B., TREUDE, C., & WAGNER, M. (2021). What makes
a good Node. js package? Investigating Users,
Contributors, and Runnability. ArXiv Preprint
ArXiv:2106.12239.
Saniati, S., Assuja, M. A., & Pramita, G. (2022). Pelatihan
Pemrograman Web Menggunakan Framework
Laravel di SMKN 1 Bandarlampung. Journal of
Engineering and Information Technology for
Community Service, 1(2), 87–94.
Setiawan, E. I., Santoso, J., & Purnomo, M. H. (2024). Social
Network Analysis dengan Python NetworkX dan Pajek:
Dilengkapi AI/ML dan Implementasi serta Deployment
ke Google Cloud Menggunakan Express. js dan Node. js.
Jakad Media Publishing.

I 167
Pemrograman Web Framework dengan [Link]
Shkodra, E., Jajaga, E., & Shala, M. (2021). Development
and Performance Analysis of RESTful APIs in Core
and Node. js using MongoDB Database. WEBIST, 227–
234.
Sud, K., & Sud, K. (2020). Beginning Node. JS. Practical
Hapi: Build Your Own Hapi Apps and Learn from
Industry Case Studies, 13–19.

168 IPemrograman Web Framework dengan [Link]


Tentang Penulis
Panji Andhika Pratomo, [Link]., M.T.I,
dilahirkan di kota Bandar Lampung
pada tanggal 08 Oktober 1990.
Penulis menyelesaikan S1-Teknik
Informatika pada tahun 2012 di
STMIK Teknokrat dan S2-Teknik
Informatika pada tahun 2017 di
Institut Informatika dan Bisnis Darmajaya. Sebelum
menjadi dosen Penulis mengabdikan diri pada PT. Bank
Rakyat Indonesia (Persero) Tbk selama 5 (Lima) tahun.
Saat ini penulis merupakan dosen tetap Program Studi
Manajemen Informatika Politeknik Negeri Lampung dan
mengampu beberapa matakuliah seperti Pemrograman
Basis Data Pemrograman Web dan Web Framework.

I 169
Pemrograman Web Framework dengan [Link]
Dewi Kania Widyawati, [Link].,
[Link], dilahirkan di kota Bandung
pada tanggal 24 Juni 1972. Penulis
menyelesaikan S1-Manajemen
Informatika pada tahun 1999 di
STMIK Bandung dan S2-Ilmu Komputer pada tahun 2012
di Institut Pertanian Bogor . Penulis saat ini merupakan
dosen tetap Program Studi Manajemen Informatika
Politeknik Negeri Lampung dan mengampu beberapa
matakuliah seperti Sistem Basis Data, Logika Informatika ,
Pemrograman SQL 1, Matematika , Analisis dan
Perancangan Sistem Informasi, Proyek Mandiri. Selain
mengajar penulis juga memiliki beberapa sertifikat di
bidang Pemrograman dan Digital Marketing Manager
(DMM). Penulis juga telah menulis Buku Ajar Sistem Basis
Data dan Buku Ajar Dasar Pemrograman: Teori & Aplikasi.

170 IPemrograman Web Framework dengan [Link]


Tri Sandhika Jaya, [Link]., [Link],
dilahirkan di kota Bandar Lampung
pada tanggal 18 Januari 1986.
Penulis menyelesaikan S1-Teknik
Informatika pada tahun 2008 di
Universitas Islam Indonesia
Yogyakarta dan S2-Sistem Informasi
pada tahun 2012 di Universitas Diponegoro Semarang .
Penulis saat ini merupakan dosen tetap Program Studi
Manajemen Informatika Politeknik Negeri Lampung dan
mengampu beberapa matakuliah seperti Algoritma dan
Pemrograman , Pemrograman Web I, Pemrograman Web
II , Analisis dan Perancangan Sistem Informasi,
Pemrograman Web Framework, dan Pemrograman
Berbasis Mobile. Selain mengajar penulis juga memiliki
beberapa sertifikat kompetensi yaitu Web Programmer
dan Mobile Programmer

I 171
Pemrograman Web Framework dengan [Link]
172 IPemrograman Web Framework dengan [Link]

Anda mungkin juga menyukai