Episode ini menghubungkan Node.js ke database sungguhan: memakai driver pg dengan connection pool, membandingkan dengan ORM Prisma, mengelola connection string lewat environment variables, dan menjalankan migration untuk skema database.

Memilih database hanyalah langkah pertama. Untuk benar-benar memakainya dari Node.js, kalian harus menghubungkan keduanya lewat driver atau ORM. Driver memberi kontrol penuh atas SQL mentah, sementara ORM menyediakan model dan type safety di atasnya.
Episode 14 mempraktikkan kedua pendekatan dengan PostgreSQL: koneksi dasar dan connection pool memakai driver pg, lalu model dengan ORM Prisma, pengelolaan connection string, dan migration. Kalian akan memahami perbedaan serta kapan memakai masing-masing.
Driver pg adalah pilihan klasik untuk PostgreSQL di Node.js. Alih-alih membuat koneksi untuk setiap query, gunakan Pool yang menyimpan kumpulan koneksi dan meminjamkannya saat dibutuhkan:
npm install pgnpm install pg menambahkan driver resmi untuk PostgreSQL. Perhatikan: setiap koneksi database mahal — menyalakannya memakan waktu dan resource. Pool menyelesaikan ini dengan memakai ulang koneksi.
import pg from "pg";
const pool = new pg.Pool({ connectionString: process.env.DATABASE_URL });
const hasil = await pool.query("SELECT 1 AS angka");
console.log(hasil.rows);
await pool.end();new pg.Pool({ connectionString: process.env.DATABASE_URL }) membuat pool dari connection string di environment variable. pool.query("SELECT 1 AS angka") mengirim SQL dan mengembalikan rows. Jangan lupa pool.end() saat aplikasi berhenti agar koneksi dibersihkan.
Jangan pernah menyisipkan nilai ke query dengan concatenation string. Gunakan parameter placeholder untuk keamanan dan kejelasan:
const hasil = await pool.query(
"SELECT * FROM pengguna WHERE email = $1",
[email],
);Placeholder $1 diisi dari array argumen kedua, sehingga nilai input dikirim terpisah dari SQL dan tidak bisa menyisipkan perintah jahat. Ini perisai utama melawan SQL injection — akan kita bahas lebih dalam di episode 20.
ORM menerjemahkan skema database menjadi objek yang bisa dipakai di JavaScript. Prisma adalah ORM modern untuk Node.js dengan type safety dan tooling yang lengkap:
npm install prisma --save-dev
npx prisma init --datasource-provider postgresqlnpx prisma init --datasource-provider postgresql membuat folder prisma dengan file schema.prisma dan menambahkan DATABASE_URL ke .env. Skema adalah sumber kebenaran — kalian mendeskripsikan model, lalu Prisma menghasilkan klien dan migration.
model Pengguna {
id Int @id @default(autoincrement())
email String @unique
nama String
createdAt DateTime @default(now())
}Model Pengguna di atas menandai id sebagai primary key, email unik, dan createdAt otomatis terisi waktu sekarang. Deklaratif ini menggantikan perintah CREATE TABLE manual dari episode 13 — dan menghasilkan klien TypeScript yang aman.
Connection string PostgreSQL mengikuti format tetap:
postgresql://username:password@host:port/nama_databaseSimpan nilai ini di .env sebagai DATABASE_URL. Bagian password sebaiknya berisi karakter yang di-encode jika memuat karakter khusus. Jangan pernah commit file .env ke repository.
Perubahan skema dikelola sebagai migration — serangkaian perubahan yang bisa diterapkan ke banyak database dengan urutan pasti:
npx prisma migrate dev --name initnpx prisma migrate dev --name init membuat file migration dari skema, menerapkannya ke database development, lalu membangkitkan klien. Setiap perubahan model berikutnya menghasilkan migration baru — inilah cara tim menjaga skema tetap sinkron antar environment.
Tidak ada jawaban salah — yang penting konsisten dan sesuai kebutuhan project. Yang sama pentingnya: apa pun pilihannya, connection string tetap di environment variable dan query input selalu diparameterisasi.
Inti yang harus dibawa pulang:
pg.Pool memakai ulang koneksi sehingga query lebih efisien.schema.prisma dan menghasilkan klien.DATABASE_URL disimpan di environment variable, bukan di kode.npx prisma migrate dev.Di episode 15 selanjutnya kita akan membahas model, skema, dan validasi data — mendesain skema yang baik di Prisma, memvalidasi input request dengan Zod, serta menerapkan validasi di route Express sebelum data menyentuh database. Validasi adalah garis pertahanan kedua setelah query aman.