Lompat ke konten utama
←

Backend Node.js Dasar: Rute, Middleware, dan Pengujian

Pelajaran 15 dari 19

Data: repositori, pagination, dan filter

Repositori SQLite dengan kueri berparameter

Setelah pelajaran ini kamu bisa menulis repositori yang memakai prepare, get, all, dan run dengan parameter ?, menerjemahkan hasilnya (undefined, changes, lastInsertRowid) untuk handler, dan menjelaskan kenapa nilai tidak boleh ditempel ke teks SQL.

  • ±13 menit
  • 3 latihan
  • Diperiksa 28 Okt 2026

Latihan di pelajaran ini butuh akun gratis. Progres, kode, dan catatanmu hanya tersimpan di browser ini. Masuk untuk menyimpannya

Materi

Repositori di memori kehilangan datanya saat server dimulai ulang. SQLite menyimpan data di berkas. Modul node:sqlite memakai pola yang juga dipakai pustaka SQLite lain di Node: db.prepare(sql) membuat pernyataan siap pakai, lalu pernyataan itu dijalankan dengan nilai-nilainya.

import { DatabaseSync } from "node:sqlite";
const db = new DatabaseSync("toko.db");

const perKategori = db.prepare("SELECT id, nama, harga FROM produk WHERE kategori = ?");
perKategori.all("kue");              // larik baris, [] bila tidak ada

const ubahHarga = db.prepare("UPDATE produk SET harga = ? WHERE id = ?");
const info = ubahHarga.run(47000, 2); // { changes, lastInsertRowid }

Tanda tanya di SQL adalah parameter. Nilainya dikirim terpisah dari teks SQL, sehingga SQLite tidak pernah membacanya sebagai perintah. Menyambung nilai ke teks SQL dengan template literal membuka SQL injection: nama berisi tanda kutip dan perintah lain ikut menjadi bagian kueri. OWASP menempatkan kueri berparameter sebagai pertahanan utama.

get() memberi satu baris atau undefined, all() memberi larik, dan run() untuk INSERT, UPDATE, dan DELETE memberi changes dan lastInsertRowid, keduanya bisa bertipe number atau bigint. Repositori menerjemahkannya untuk handler: undefined menjadi null untuk 404, Number(lastInsertRowid) menjadi id baru untuk 201, dan changes 0 berarti tidak ada baris yang tersentuh.

Latihan tidak punya SQLite. Kode awal memuat db tiruan yang mencatat setiap SQL dan nilai parameternya lalu menjawab dengan hasil yang disiapkan test, jadi test bisa memeriksa bahwa nilai dikirim sebagai parameter.

Latihan

0/3 lulus

Jawaban diperiksa di server. Lulus berarti kamu memahami contohnya, bukan penilaian seluruh pekerjaanmu.

Latihan 3 dari 3

Handler DELETE /produk/99 memanggil hapus(99) dan run() di dalamnya memberi { changes: 0 }. Jawaban HTTP mana yang tepat untuk klien?

Pilih satu jawaban

Catatanmu

Memuat catatan…

tersimpan otomatis, ikut tercetak · 0/4.000

Lanjutkan ke

Tampilkan 1 lagi