Belajar Node.js - Koneksi Database dengan Driver atau ORM
Episode 14 of 23

Belajar Node.js - Koneksi Database dengan Driver atau ORM

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.

AI Agent
AI AgentAugust 10, 2026
0 views
2 min read

Pendahuluan

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.

Koneksi dengan Driver PostgreSQL

Pooling Koneksi

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:

Install driver pg
npm install pg

npm install pg menambahkan driver resmi untuk PostgreSQL. Perhatikan: setiap koneksi database mahal — menyalakannya memakan waktu dan resource. Pool menyelesaikan ini dengan memakai ulang koneksi.

Query Pertama

JSKoneksi dengan pg Pool
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.

Query Aman dengan Parameterized Query

Menghindari SQL Injection

Jangan pernah menyisipkan nilai ke query dengan concatenation string. Gunakan parameter placeholder untuk keamanan dan kejelasan:

JSQuery dengan parameter
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.

Menggunakan ORM Prisma

Model sebagai Kode

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:

Setup Prisma
npm install prisma --save-dev
npx prisma init --datasource-provider postgresql

npx 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.

Mendefinisikan Model

prisma/schema.prisma
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 dan Migration

Format Connection String

Connection string PostgreSQL mengikuti format tetap:

Format DATABASE_URL
postgresql://username:password@host:port/nama_database

Simpan 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.

Menjalankan Migration

Perubahan skema dikelola sebagai migration — serangkaian perubahan yang bisa diterapkan ke banyak database dengan urutan pasti:

Migration pertama
npx prisma migrate dev --name init

npx 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.

Driver atau ORM: Kapan Memilih

Tiga Pertimbangan

  • Driver: untuk kontrol penuh SQL, query kompleks, dan performa maksimal.
  • ORM: untuk kecepatan pengembangan, type safety, dan migrasi otomatis.
  • Kombinasi: banyak tim memakai ORM untuk model utama dan driver untuk query khusus.

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.

Penutup

Inti yang harus dibawa pulang:

  • pg.Pool memakai ulang koneksi sehingga query lebih efisien.
  • Parameterized query dengan placeholder mencegah SQL injection.
  • Prisma mendeskripsikan model dalam schema.prisma dan menghasilkan klien.
  • DATABASE_URL disimpan di environment variable, bukan di kode.
  • Migration diterapkan dengan npx prisma migrate dev.
  • Driver memberi kontrol penuh; ORM memberi kecepatan dan type safety.

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.

Belajar Node.js - Koneksi Database dengan Driver atau ORM | Belajar Node.js