Halo, para coder masa depan yang pengen bikin aplikasi POS keren!
Kalau kamu pernah mikir, "Gimana cara aplikasi kasir bisa nyimpen data transaksi?", jawabannya adalah database yang terhubung dengan backend. Nah, dalam tutorial ini, kita bakal menghubungkan Express.js dengan PostgreSQL menggunakan pg (node-postgres).
Siap? Pasang seatbelt, kita mulai!
1. Menginstal dan Menggunakan pg
(node-postgres)
Apa itu pg
?
pg
adalah pustaka Node.js yang memungkinkan aplikasi Express.js berkomunikasi dengan PostgreSQL.
Install dulu!
Jalankan perintah ini di terminal:
npm install pg dotenv
pg
→ Untuk menghubungkan Express.js ke PostgreSQL.dotenv
→ Untuk menyimpan konfigurasi database dengan aman.
2. Membuat Koneksi ke PostgreSQL dan Query Dasar
Buka file .env
di proyekmu dan tambahkan konfigurasi database:
DATABASE_URL=postgresql://username:password@localhost:5432/namadatabase
Ganti:
username
→ Username PostgreSQL kamu.password
→ Password PostgreSQL kamu.namadatabase
→ Nama database yang kamu buat.
Sekarang, buat file baru config/db.js
untuk koneksi database:
const { Pool } = require("pg");
require("dotenv").config();
// Membuat koneksi pool
const pool = new Pool({
connectionString: process.env.DATABASE_URL,
});
pool.connect()
.then(() => console.log(" Database terhubung!"))
.catch((err) => console.error(" Koneksi gagal:", err));
module.exports = pool;
2.1. Query Dasar PostgreSQL di Express.js
Sekarang, kita coba buat query dasar!
Buka routes/testRoutes.js
dan tambahkan ini:
const express = require("express");
const router = express.Router();
const pool = require("../config/db");
// Ambil semua data dari tabel "products"
router.get("/products", async (req, res) => {
try {
const { rows } = await pool.query("SELECT * FROM products");
res.json(rows);
} catch (error) {
console.error(error);
res.status(500).json({ error: "Gagal mengambil data produk" });
}
});
module.exports = router;
Coba akses API ini:
http://localhost:3000/test/products
Kalau berhasil, kamu akan melihat daftar produk dalam format JSON!
3. Mengatur dan Mengelola Koneksi Database di Express.js
Untuk aplikasi skala besar, kita harus mengatur koneksi dengan baik biar nggak boros memori!
3.1. Gunakan Pooling untuk Efisiensi
Daripada membuat satu koneksi per request, gunakan pooling untuk berbagi koneksi:
const pool = new Pool({
connectionString: process.env.DATABASE_URL,
max: 10, // Maksimum 10 koneksi dalam pool
idleTimeoutMillis: 30000, // Tutup koneksi yang idle selama 30 detik
});
Keuntungan pooling:
- Lebih hemat sumber daya.
- Mengurangi beban server database.
- Mencegah kebocoran koneksi.
3.2. Gunakan Middleware untuk Logging Query
Tambahkan middleware sederhana buat nge-log query yang dieksekusi:
pool.on("connect", () => {
console.log("🔗 Koneksi baru ke database!");
});
pool.on("error", (err) => {
console.error(" Terjadi kesalahan database:", err);
});
Dengan ini, kita bisa tahu kalau ada koneksi yang bocor atau error!
4. Optimasi Query Database untuk Kinerja
Database yang cepat = Aplikasi POS yang ngebut!
Gunakan Index → Index membantu mempercepat pencarian data!
CREATE INDEX idx_products_name ON products(name);
Gunakan LIMIT
dan OFFSET
untuk Pagination
router.get("/products", async (req, res) => {
const { page = 1, limit = 10 } = req.query;
const offset = (page - 1) * limit;
try {
const { rows } = await pool.query("SELECT * FROM products LIMIT $1 OFFSET $2", [limit, offset]);
res.json(rows);
} catch (error) {
res.status(500).json({ error: "Gagal mengambil produk" });
}
});
Gunakan Prepared Statements untuk Keamanan
Jangan pernah menulis query SQL secara langsung dengan data user! Gunakan prepared statements biar aman dari SQL Injection:
const { rows } = await pool.query("SELECT * FROM products WHERE name = $1", [productName]);
Aman!
Jangan gunakan SELECT * FROM products WHERE name = '" + productName + "'"
(bisa diserang SQL Injection!).
Kesimpulan
Sekarang aplikasi POS kamu sudah terhubung ke PostgreSQL dengan Express.js!
- Koneksi ke PostgreSQL menggunakan
pg
sudah siap. - Query dasar sudah bisa digunakan.
- Koneksi database sudah dioptimasi dengan pooling.
- Optimasi query sudah diterapkan agar aplikasi lebih cepat.
0 Comments