Skip to content

Menggunakan pg.Client di Node.js

Updated: at 17.12

Dalam artikel ini, kita akan membahas secara mendalam tentang pg.Client, cara menggunakannya, dan tips-tips penting untuk memaksimalkan pengalaman Kita dalam mengembangkan aplikasi dengan Node.js dan PostgreSQL.

Apa itu pg.Client?

pg.Client adalah sebuah kelas dalam library node-postgres yang merepresentasikan satu koneksi ke database PostgreSQL. Dengan menggunakan pg.Client, Kita dapat terhubung ke database, menjalankan query, dan melakukan berbagai operasi database lainnya.

Mengapa Menggunakan pg.Client?

Ada beberapa alasan mengapa Kita mungkin ingin menggunakan pg.Client secara langsung:

  1. Kontrol yang lebih granular: Dengan pg.Client, Kita memiliki kontrol penuh atas koneksi ke database. Kita dapat menentukan kapan harus terhubung, menjalankan query, dan menutup koneksi.

  2. Transaksi: Saat bekerja dengan transaksi, Kita harus menggunakan satu instance pg.Client yang sama untuk semua pernyataan (query) dalam transaksi tersebut. Ini memastikan bahwa semua pernyataan dieksekusi dalam konteks transaksi yang sama.

  3. Penggunaan yang fleksibel: Meskipun pg.Pool sering digunakan untuk manajemen koneksi yang efisien, pg.Client memberikan fleksibilitas dalam situasi di mana Kita memerlukan kontrol yang lebih besar atau ketika Kita hanya perlu satu koneksi.

Memulai dengan pg.Client

Sebelum menggunakan pg.Client, pastikan Kita telah menginstal library node-postgres. Kita dapat menginstalnya melalui npm dengan perintah berikut:

npm install pg

Setelah itu, Kita dapat mengimpor pg.Client dalam kode Anda:

const { Client } = require("pg");

atau jika menggunakan ES modules:

import { Client } from "pg";

Membuat Instance pg.Client

Untuk membuat instance pg.Client, Kita perlu memberikan konfigurasi koneksi database. Konfigurasi ini dapat berupa objek dengan properti seperti host, port, database, user, dan password.

const client = new Client({
  host: "localhost",
  port: 5432,
  database: "mydatabase",
  user: "myuser",
  password: "mypassword",
});

Anda juga dapat menggunakan connection string untuk menentukan konfigurasi koneksi:

const connectionString =
  "postgresql://myuser:mypassword@localhost:5432/mydatabase";
const client = new Client({
  connectionString: connectionString,
});

Menghubungkan ke Database

Setelah membuat instance pg.Client, Kita perlu menghubungkannya ke database sebelum dapat menjalankan query. Gunakan metode connect() untuk melakukannya:

await client.connect();

Metode connect() mengembalikan Promise, sehingga Kita dapat menggunakan await untuk menunggu hingga koneksi berhasil.

Menjalankan Query

Setelah terhubung ke database, Kita dapat menjalankan query menggunakan metode query() pada instance pg.Client:

const result = await client.query("SELECT * FROM users");
console.log(result.rows);

Metode query() menerima query SQL sebagai argumen dan mengembalikan Promise yang akan resolve dengan hasil query. Hasil query dapat diakses melalui properti rows pada objek hasil.

Menggunakan Parameter dalam Query

Untuk menghindari risiko SQL injection, disarankan untuk menggunakan parameter dalam query. Kita dapat menggunakan placeholder $1, $2, dan seterusnya dalam query, dan memberikan nilai parameter sebagai argumen kedua pada metode query():

const userId = 1;
const result = await client.query("SELECT * FROM users WHERE id = $1", [
  userId,
]);
console.log(result.rows);

Transaksi

Saat bekerja dengan transaksi, Kita harus menggunakan satu instance pg.Client yang sama untuk semua pernyataan dalam transaksi. Berikut adalah contoh penggunaan transaksi dengan pg.Client:

await client.query("BEGIN");

try {
  await client.query("INSERT INTO users (name) VALUES ($1)", ["Alice"]);
  await client.query(
    "UPDATE accounts SET balance = balance - 100 WHERE user_id = $1",
    [1]
  );
  await client.query("COMMIT");
} catch (err) {
  await client.query("ROLLBACK");
  throw err;
}

Dalam contoh di atas, kita memulai transaksi dengan query BEGIN, kemudian menjalankan beberapa pernyataan dalam blok try. Jika semua pernyataan berhasil, kita melakukan COMMIT untuk menyimpan perubahan. Jika terjadi kesalahan, kita melakukan ROLLBACK untuk membatalkan perubahan.

Setelah selesai menggunakan pg.Client, jangan lupa untuk menutup koneksi dengan metode end():

await client.end();

Menutup koneksi memastikan bahwa sumber daya yang terkait dengan koneksi dibebaskan dengan benar.

Tips dan Best Practice

  1. Gunakan connection pool: Jika aplikasi Kita memiliki banyak permintaan concurrent, pertimbangkan untuk menggunakan pg.Pool untuk manajemen koneksi yang efisien.

  2. Tangani kesalahan: Pastikan untuk menangani kesalahan yang mungkin terjadi saat menjalankan query atau melakukan operasi database lainnya. Gunakan blok try-catch untuk menangkap dan menangani kesalahan dengan tepat.

  3. Gunakan prepared statements: Jika Kita menjalankan query yang sama secara berulang dengan parameter yang berbeda, pertimbangkan untuk menggunakan prepared statements. Ini dapat meningkatkan performa dan mengurangi overhead.

  4. Batasi jumlah koneksi: Jika menggunakan pg.Pool, sesuaikan jumlah koneksi maksimum (max) sesuai dengan kebutuhan aplikasi Anda. Terlalu banyak koneksi dapat mempengaruhi performa database.

  5. Gunakan environment variable: Alih-alih hardcode konfigurasi koneksi dalam kode, gunakan environment variable untuk menyimpan informasi sensitif seperti kredensial database. Ini memudahkan manajemen dan meningkatkan keamanan.

Kesimpulan

pg.Client adalah alat yang powerful untuk berinteraksi dengan database PostgreSQL dalam aplikasi Node.js Anda. Dengan memahami cara menggunakan pg.Client, Kita dapat membangun aplikasi yang efisien dan skalabel.

Ingatlah untuk menangani koneksi dengan hati-hati, menggunakan parameter dalam query, dan memanfaatkan fitur transaksi saat diperlukan. Dengan mengikuti best practice dan tips yang disajikan dalam artikel ini, Kita akan siap untuk mengembangkan aplikasi yang luar biasa dengan Node.js dan PostgreSQL.

Selamat coding! 🚀