- Menggunakan SQLite dengan Bun (Built-in)
- Menggunakan Prepared Statement
- Menggunakan MySQL dengan Bun
- Menggunakan PostgreSQL (Opsional)
- Menggabungkan Bun Server dengan Database
- Kesimpulan
Halo teman-teman semuanya, pada pembahasan sebelumnya kita telah belajar bagaimana membaca dan menulis file menggunakan API bawaan Bun seperti Bun.file() dan Bun.write(). Kali ini kita akan masuk ke tahap yang lebih penting dalam pengembangan aplikasi backend, yaitu menghubungkan Bun dengan Database.
Bun sudah menyediakan dukungan bawaan untuk SQLite, dan juga dapat digunakan bersama database populer seperti MySQL, PostgreSQL, atau MongoDB melalui paket dari npm. Dengan ini, kita bisa membangun aplikasi yang dinamis dan menyimpan data secara permanen di database.
Menggunakan SQLite dengan Bun (Built-in)
Bun sudah memiliki modul bun:sqlite bawaan, sehingga kita tidak perlu menginstal library tambahan apa pun untuk menggunakan SQLite.
Buat file baru bernama sqlite.js, lalu masukkan kode berikut:
import { Database } from "bun:sqlite";
// Membuat atau membuka database
const db = new Database("data.db");
// Membuat tabel jika belum ada
db.run(`
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
email TEXT NOT NULL UNIQUE
)
`);
// Menambahkan data baru
db.run("INSERT INTO users (name, email) VALUES (?, ?)", [
"Fika Ridaul",
"fika@santrikoding.com",
]);
// Membaca semua data
const users = db.query("SELECT * FROM users").all();
console.log(users);
Jalankan:
bun run sqlite.js
Output:
[ { id: 1, name: "Fika Ridaul", email: "fika@santrikoding.com" } ]
Setiap kali kita menjalankan perintah INSERT, data akan disimpan ke file data.db di folder proyek.
Menggunakan Prepared Statement
Bun SQLite juga mendukung prepared statement untuk efisiensi dan keamanan (menghindari SQL injection).
Contoh:
import { Database } from "bun:sqlite";
const db = new Database("data.db");
const insertUser = db.prepare(
"INSERT INTO users (name, email) VALUES ($name, $email)"
);
insertUser.run({
$name: "Santri Koding",
$email: "halo@santrikoding.com",
});
const selectUser = db.prepare("SELECT * FROM users WHERE email = ?");
const user = selectUser.get("halo@santrikoding.com");
console.log(user);
Output:
{ id: 2, name: "Santri Koding", email: "halo@santrikoding.com" }
Dengan prepared statement, query dijalankan lebih cepat karena tidak perlu diparsing ulang setiap kali.
Menggunakan MySQL dengan Bun
Untuk database eksternal seperti MySQL, kita bisa menggunakan library mysql2 yang kompatibel dengan Bun.
Instal dependensi terlebih dahulu:
bun add mysql2
Lalu buat file mysql.js:
import mysql from "mysql2/promise";
const db = await mysql.createConnection({
host: "localhost",
user: "root",
password: "",
database: "bun_app",
});
await db.query(`
CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(100)
)
`);
await db.query("INSERT INTO users (name, email) VALUES (?, ?)", [
"Santri Koding",
"halo@santrikoding.com",
]);
const [rows] = await db.query("SELECT * FROM users");
console.log(rows);
Jalankan:
bun run mysql.js
Output:
[ { id: 1, name: 'Santri Koding', email: 'halo@santrikoding.com' } ]
Bun dapat menjalankan library mysql2 secara native karena kompatibel penuh dengan ekosistem Node.js.
Menggunakan PostgreSQL (Opsional)
Untuk PostgreSQL, kita bisa memakai library pg:
bun add pg
Contoh penggunaan:
import pkg from "pg";
const { Client } = pkg;
const client = new Client({
host: "localhost",
user: "postgres",
password: "12345",
database: "bun_app",
});
await client.connect();
await client.query(`
CREATE TABLE IF NOT EXISTS products (
id SERIAL PRIMARY KEY,
name TEXT,
price INTEGER
)
`);
await client.query("INSERT INTO products (name, price) VALUES ($1, $2)", [
"Laptop",
12000000,
]);
const result = await client.query("SELECT * FROM products");
console.log(result.rows);
await client.end();
Output:
[ { id: 1, name: 'Laptop', price: 12000000 } ]
Menggabungkan Bun Server dengan Database
Kita bisa mengintegrasikan database dengan server Bun untuk membuat REST API sederhana.
server.js
import { Database } from "bun:sqlite";
const db = new Database("data.db");
db.run(`
CREATE TABLE IF NOT EXISTS notes (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL,
content TEXT
)
`);
Bun.serve({
port: 3000,
async fetch(req) {
const url = new URL(req.url);
if (url.pathname === "/notes" && req.method === "GET") {
const notes = db.query("SELECT * FROM notes").all();
return Response.json(notes);
}
if (url.pathname === "/notes" && req.method === "POST") {
const data = await req.json();
db.run("INSERT INTO notes (title, content) VALUES (?, ?)", [
data.title,
data.content,
]);
return new Response("Note berhasil disimpan!");
}
return new Response("404 - Endpoint tidak ditemukan", { status: 404 });
},
});
Jalankan server:
bun run server.js
Lalu akses:
-
GET http://localhost:3000/notes→ menampilkan daftar catatan -
POST http://localhost:3000/notesdengan body JSON:{ "title": "Catatan 1", "content": "Belajar Bun Database" }
Kesimpulan
Bun mendukung integrasi database dengan sangat baik, baik menggunakan SQLite bawaan maupun database populer seperti MySQL dan PostgreSQL.
Dengan API yang ringan dan kompatibilitas penuh terhadap ekosistem Node.js, Bun memudahkan kita untuk membangun aplikasi yang cepat, efisien, dan mudah dikembangkan.
Terima Kasih
Artikel ini dibaca sebanyak 1.403 kali
{ setTimeout(() => { showShimmer = false; }, 300); })"
:class="{'opacity-0': !loaded, 'opacity-100': loaded}"
class="lazy w-full h-auto rounded-xl border border-white dark:border-neutral-700/80 transition-opacity duration-500"
loading="lazy"
/>
SAWERIA
Memuat komentar...