
Di era digital seperti sekarang, hampir semua jenis bisnis dituntut untuk hadir secara online. Mulai dari toko kecil sampai perusahaan besar, semua berlomba-lomba membangun sistem digital untuk menjangkau pelanggan lebih luas, meningkatkan efisiensi operasional, dan tentu saja menaikkan pendapatan.
Misalnya gini, bayangin kamu punya bisnis penyewaan mobil. Kalau kamu hanya mengandalkan pelanggan yang datang langsung ke kantor atau tahu dari spanduk di pinggir jalan, jangkauannya terbatas banget. Tapi kalau kamu punya sistem online yang memungkinkan orang booking mobil lewat website dari rumah, potensi pasarnya langsung meluas ke mana-mana. Bahkan orang luar kota yang mau liburan pun bisa pesan lebih awal. Ini otomatis bikin potensi revenue perusahaan naik.
Nah, untuk bikin sistem seperti itu, kita butuh teknologi backend yang kuat, stabil, dan bisa berkembang seiring pertumbuhan bisnis. Di sinilah Node.js masuk sebagai pilihan yang tepat. Node.js adalah lingkungan runtime JavaScript yang cepat, ringan, dan punya ekosistem library yang luas banget. Karena sifatnya non-blocking dan event-driven, Node.js cocok digunakan untuk aplikasi yang butuh performa tinggi dan skalabilitas, seperti sistem booking online atau dashboard manajemen armada mobil.
Selain itu, Node.js juga gampang dipelajari, terutama buat kamu yang sudah familiar dengan JavaScript di frontend. Jadi proses belajarnya lebih cepat dan konsisten dari sisi bahasa pemrograman.
Belajar Menerapkan File Based Database untuk Backend Sewa Mobil
Pada artikel kali ini, kita akan bahas gimana cara bikin backend sederhana untuk katalog sewa mobil menggunakan pendekatan file based database. Konsep ini cocok banget buat pemula yang baru belajar backend dan belum siap menggunakan sistem database yang kompleks seperti MySQL atau MongoDB.
File based database artinya data akan disimpan di dalam file—biasanya dalam format JSON—dan kita akan membaca, menulis, serta mengubah file tersebut menggunakan kode program. Meskipun tidak sekuat database sunguhan dalam hal kecepatan dan fleksibilitas, metode ini sangat pas digunakan untuk kebutuhan skala kecil atau saat kita sedang membangun prototype.
Misalnya kita ingin bikin website sewa mobil yang menampilkan daftar mobil yang tersedia, lengkap dengan nama, merek, tahun produksi, dan harga sewa per hari. Semua informasi ini bisa disimpan dalam satu file .json
dan dibaca oleh sistem Node.js saat dibutuhkan.
Keuntungan pendekatan ini adalah sederhana, tidak perlu setup database server, dan kita bisa langsung fokus memahami alur backend, seperti membaca data, memfilter berdasarkan query, dan mengembalikan respons ke client dalam format JSON. Tapi tentu ada juga keterbatasannya, misalnya performa yang menurun kalau datanya makin besar, atau data tidak bisa diakses secara paralel secara efisien.
Intinya, file based database adalah titik awal yang bagus buat belajar struktur backend sederhana dan memahami dasar-daesar bagaimana data bekerja di dalam aplikasi web. Dari sini, kamu bisa lanjut ke tahapan yang lebih kompleks, seperti menggunakan database relasional atau NoSQL di proyek-proyek selanjutnya.
Di bagian berikutnya nanti, kita akan coba bangun struktur backendnya secara bertahap. Tapi yang pasti, kamu bakal dapet pengalaman langsung gimana cara kerja sistem backend dari nol.
Cara Install Node.js Framework Terbaru di Windows
Sebelum kita mulai bikin proyek backend, hal paling pertama yang perlu dilakukan tentu aja install Node.js dulu di komputermu. Kalau kamu pengguna Windows, tenang aja—caranya cukup gampang dan bisa kamu selesaikan dalam beberapa menit.
Langkah pertama, buka browser dan pergi ke website resmi Node.js di alamat https://nodejs.org/. Di halaman utama kamu akan lihat dua tombol besar—satu untuk versi LTS (Long-Term Support) dan satu lagi versi Current. Disarankan kamu pilih versi LTS karena lebih stabil untuk proyek jangka panjang.
Setelah file installer (.msi
) selesai diunduh, jalankan file tersebut. Proses instalasi akan memandu kamu lewat beberapa langkah. Tinggal klik "Next" saja sampai selesai. Pastikan kamu mencentang opsi yang menambahkan Node.js ke dalam PATH
, agar bisa digunakan langsung dari Command Prompt atau terminal.
Setelah instalasi selesai, buka Command Prompt
dan ketik perintah berikut untuk memastikan bahwa Node.js dan npm (Node Package Manager) sudah berhasil diinstall:
node -v
Perintah ini akan menampilkan versi Node.js yang terpasang, misalnya v22.0.0
.
npm -v
Ini akan menampilkan versi npm, seperti 10.2.0
. Kalau dua perintah ini menampilkan versi dengan benar, artinya kamu sudah siap memulai proyek Node.js-mu.
Cara Membuat Proyek Backend Node.js untuk Katalog Sewa Mobil
Setelah Node.js berhasil kamu install, sekarang kita mulai bikin proyek backend sederhana. Proyek ini akan menjadi dasar dari sistem katalog sewa mobil, di mana nanti kita bisa menampilkan daftar mobil, membaca data dari file, dan memberikan respons berupa JSON. Tapi di tahap ini, kita fokus dulu bikin struktur awal proyeknya.
Pertama, buat dulu folder kosong untuk menyimpan semua file proyek kamu. Misalnya kamu bisa kasih nama katalog-sewa-mobil
. Kamu bisa buat lewat File Explorer, atau langsung dari terminal:
mkdir katalog-sewa-mobil
cd katalog-sewa-mobil
Setelah masuk ke folder proyek, jalankan perintah berikut untuk membuat file package.json
. File ini akan menyimpan informasi dasar proyek seperti nama, versi, dan dependensi yang dibutuhkan.
npm init -y
Tanda -y
artinya semua pertanyaan default akan dijawab otomatis, jadi prosesnya cepat.
Selanjutnya, kita butauh satu file utama untuk menjalankan server. Biasanya kita kasih nama server.js
, karena fungsinya untuk menjalankan HTTP server:
echo. > server.js
Kalau kamu pakai text editor seperti VS Code, kamu juga bisa langsung klik kanan dan pilih "New File", lalu tulis server.js
.
Setelah itu, kita akan buat juga satu folder bernama data
. Di dalam folder ini nanti kita simpan file .json
yang berfungsi sebagai database sederhana—alias file based database:
mkdir data
Sampai tahap ini, struktur folder kamu seharusnya terlihat seperti ini:
katalog-sewa-mobil/
├── data/
├── package.json
└── server.js
Struktur ini adalah pondasi awal dari proyek backend kamu. Di artikel selanjutnya, kita akan mulai menulis logika untuk membaca file JSON dan menampilkan data mobil melalui endpoint yang bisa diakses lewat browser atau API client seperti Postman. Tapi sejauh ini, kamu udah siap banget buat lanjut ke tahap coding.
Struktur Folder dan File yang Best Practice dalam Proyek Node.js
Dalam membangun aplikasi backend Node.js yang rapi, scalable, dan mudah dipelihara, penting banget buat kita menggunakan struktur folder yang tertata dengan baik. Meskipun pada awalnya proyek kamu sederhana, membiasakan diri menggunakan struktur yang clean sejak awal akan memudahkan kamu atau tim kamu saat proyek berkembang lebih besar nanti.
Berikut ini adalah struktur folder yang umum digunakan dalam proyek Node.js, khususnya kalau kamu tidak menggunakan framework seperti Express Generator, tapi ingin tetap rapi dan terorganisir:
katalog-sewa-mobil/
├── controllers/
├── routes/
├── services/
├── models/
├── data/
├── utils/
├── server.js
├── package.json
Penjelasan tiap folder dan file:
controllers/
: berisi logika untuk menangani permintaan (request) dan mengirim respons (response). Di sinilah tempat kamu menulis logika endpoint API seperti/cars
.routes/
: berisi definisi endpoint dan rutenya, biasanya dipisahkan per fitur agar modular.services/
: tempat logika bisnis utama, seperti filtering data, menyimpan data baru, validasi sederhana, dan lain-lain. Biasanya digunakan oleh controller.models/
: menyimpan struktur data atau skema sederhana jika tidak menggunakan database seperti MongoDB atau Sequelize. Bisa juga sebagai lapisan abstraksi file JSON.data/
: menyimpan file-file.json
yang berperan sebagai file-based database.utils/
: berisi helper function, seperti format tanggal, generate ID, logging, dll.server.js
: titik masuk aplikasi, tempat menjalankan server dan menghubungkan semua bagian.package.json
: konfigurasi dan dependensi proyek.
Contoh Koding Folder Dasar
server.js
const http = require('http');
const { handleCarRoutes } = require('./routes/car.routes');
const PORT = 3000;
const server = http.createServer((req, res) => {
// Routing dasar
if (req.url.startsWith('/cars')) {
return handleCarRoutes(req, res);
}
res.writeHead(404, { 'Content-Type': 'application/json' });
res.end(JSON.stringify({ message: 'Route tidak ditemukan' }));
});
server.listen(PORT, () => {
console.log(`Server berjalan di <http://localhost>:${PORT}`);
});
routes/car.routes.js
const { getAllCars } = require('../controllers/car.controller');
function handleCarRoutes(req, res) {
if (req.method === 'GET' && req.url === '/cars') {
return getAllCars(req, res);
}
res.writeHead(404, { 'Content-Type': 'application/json' });
res.end(JSON.stringify({ message: 'Endpoint cars tidak ditemukan' }));
}
module.exports = { handleCarRoutes };
controllers/car.controller.js
const { readCarData } = require('../services/car.service');
function getAllCars(req, res) {
const cars = readCarData();
res.writeHead(200, { 'Content-Type': 'application/json' });
res.end(JSON.stringify(cars));
}
module.exports = { getAllCars };
services/car.service.js
const fs = require('fs');
const path = require('path');
function readCarData() {
const filePath = path.join(__dirname, '../data/cars.json');
const fileContent = fs.readFileSync(filePath, 'utf8');
return JSON.parse(fileContent);
}
module.exports = { readCarData };
data/cars.json
[
{
"id": 1,
"name": "Toyota Innova",
"year": 2021,
"price_per_day": 450000
},
{
"id": 2,
"name": "Suzuki Ertiga",
"year": 2020,
"price_per_day": 380000
}
]
Dengan struktur ini, kamu bisa lebih mudah memisahkan tanggung jawab antar bagian. Misalnya, controller hanya fokus pada req
dan res
, sedangkan service bertanggung jawab untuk baca data atau menjalankan logika tertentu. Kalau nanti mau tambah fitur seperti tambah mobil baru, tinggal tambahkan method baru di car.service.js
dan car.controller.js
tanpa merusak struktur yang ada.
Struktur ini juga memudahkan untuk testing, debug, dan scale up—baik ketika kamu mau ganti dari file based ke database sesungguhnya, atau saat mau deploy ke production.
Cara Menyiapkan 100.000 Data JSON secara Otomatis
Menyiapkan 100.000 data secara manual jelas bukan pilihan yang masuk akal. Untungnya, kita bisa menggunakan script Node.js sederhana untuk membuat data dummy dalam jumlah besar dan menyimpannya langsung ke file cars.json
.
Kita akan menggunakan module fs
bawaan Node.js untuk menulis file, dan membuat array berisi objek-objek mobil dengan data yang dibangkitkan secara otomatis.
Langkah pertama, buat file baru misalnya generate.js
di dalam folder proyek kamu.
Isi dengan kode berikut:
const fs = require('fs');
const path = require('path');
// Fungsi bantu untuk menghasilkan nama mobil acak
function generateCarName(index) {
const brands = ['Toyota', 'Honda', 'Daihatsu', 'Suzuki', 'Nissan', 'Mitsubishi'];
const models = ['Avanza', 'Brio', 'Xenia', 'Ertiga', 'Livina', 'Xpander'];
const brand = brands[index % brands.length];
const model = models[index % models.length];
return `${brand} ${model}`;
}
const cars = [];
for (let i = 1; i <= 100000; i++) {
const car = {
id: i,
name: generateCarName(i),
year: 2015 + (i % 10), // tahun antara 2015-2024
price_per_day: 250000 + (i % 10) * 10000 // variasi harga dari 250rb sampai 350rb
};
cars.push(car);
}
const filePath = path.join(__dirname, 'data', 'cars.json');
fs.writeFile(filePath, JSON.stringify(cars, null, 2), (err) => {
if (err) {
console.error('Gagal menyimpan file:', err);
} else {
console.log('Berhasil membuat 100.000 data mobil ke dalam cars.json');
}
});
Penjelasan singkat:
- Fungsi
generateCarName()
membuat nama mobil berdasarkan array merek dan model, lalu digabungkan. - Loop
for
membuat 100.000 objek mobeil denganid
,name
,year
, danprice_per_day
yang variatif. - Semua data disimpan ke dalam array
cars
lalu ditulis ke filecars.json
menggunakanfs.writeFile()
.
Untuk menjalankan scrippt ini, buka terminal di folder proyek lalu jalankan:
node generate.js
Dalam beberapa detik (tergantung spek komputermu), file cars.json
di folder data/
akan terisi dengan 100.000 data mobil siap pakai. Kamu bisa pakai file ini untuk testing, simulasi API, atau keperluan performance benchmarking.
Cara Menambahkan Route CRUD Data Mobil ke File JSON
Setelah kita berhasil menyiapkan file cars.json
, sekarang waktunya menambahkan fitur CRUD (Create, Read, Update, Delete) untuk memanipulasi data mobil yang tersimpan di file tersebut. Kita akan melanjutkan dari struktur yang sudah kita buat sebelumnya.
Langkah 1: Update routes/car.routes.js
untuk mendukung semua method HTTP
const {
getAllCars,
getCarById,
createCar,
updateCarById,
deleteCarById
} = require('../controllers/car.controller');
function handleCarRoutes(req, res) {
if (req.method === 'GET' && req.url === '/cars') {
return getAllCars(req, res);
}
if (req.method === 'GET' && req.url.startsWith('/cars/')) {
return getCarById(req, res);
}
if (req.method === 'POST' && req.url === '/cars') {
return createCar(req, res);
}
if (req.method === 'PUT' && req.url.startsWith('/cars/')) {
return updateCarById(req, res);
}
if (req.method === 'DELETE' && req.url.startsWith('/cars/')) {
return deleteCarById(req, res);
}
res.writeHead(404, { 'Content-Type': 'application/json' });
res.end(JSON.stringify({ message: 'Endpoint cars tidak ditemukan' }));
}
module.exports = { handleCarRoutes };
Langkah 2: Update controllers/car.controller.js
dengan semua operasi CRUD
const {
readCarData,
writeCarData
} = require('../services/car.service');
function getAllCars(req, res) {
const cars = readCarData();
res.writeHead(200, { 'Content-Type': 'application/json' });
res.end(JSON.stringify(cars));
}
function getCarById(req, res) {
const id = parseInt(req.url.split('/')[2]);
const cars = readCarData();
const car = cars.find(c => c.id === id);
if (!car) {
res.writeHead(404, { 'Content-Type': 'application/json' });
return res.end(JSON.stringify({ message: 'Mobil tidak ditemukan' }));
}
res.writeHead(200, { 'Content-Type': 'application/json' });
res.end(JSON.stringify(car));
}
function createCar(req, res) {
let body = '';
req.on('data', chunk => {
body += chunk;
});
req.on('end', () => {
const newCar = JSON.parse(body);
const cars = readCarData();
newCar.id = cars.length > 0 ? cars[cars.length - 1].id + 1 : 1;
cars.push(newCar);
writeCarData(cars);
res.writeHead(201, { 'Content-Type': 'application/json' });
res.end(JSON.stringify(newCar));
});
}
function updateCarById(req, res) {
const id = parseInt(req.url.split('/')[2]);
let body = '';
req.on('data', chunk => {
body += chunk;
});
req.on('end', () => {
const updatedData = JSON.parse(body);
const cars = readCarData();
const index = cars.findIndex(c => c.id === id);
if (index === -1) {
res.writeHead(404, { 'Content-Type': 'application/json' });
return res.end(JSON.stringify({ message: 'Mobil tidak ditemukan' }));
}
cars[index] = { ...cars[index], ...updatedData };
writeCarData(cars);
res.writeHead(200, { 'Content-Type': 'application/json' });
res.end(JSON.stringify(cars[index]));
});
}
function deleteCarById(req, res) {
const id = parseInt(req.url.split('/')[2]);
let cars = readCarData();
const index = cars.findIndex(c => c.id === id);
if (index === -1) {
res.writeHead(404, { 'Content-Type': 'application/json' });
return res.end(JSON.stringify({ message: 'Mobil tidak ditemukan' }));
}
const deleted = cars.splice(index, 1)[0];
writeCarData(cars);
res.writeHead(200, { 'Content-Type': 'application/json' });
res.end(JSON.stringify(deleted));
}
module.exports = {
getAllCars,
getCarById,
createCar,
updateCarById,
deleteCarById
};
Langkah 3: Tambahkan helper writeCarData
di services/car.service.js
const fs = require('fs');
const path = require('path');
function readCarData() {
const filePath = path.join(__dirname, '../data/cars.json');
const fileContent = fs.readFileSync(filePath, 'utf8');
return JSON.parse(fileContent);
}
function writeCarData(data) {
const filePath = path.join(__dirname, '../data/cars.json');
fs.writeFileSync(filePath, JSON.stringify(data, null, 2), 'utf8');
}
module.exports = {
readCarData,
writeCarData
};
Sampai tahap ini, kamu sudah memiliki CRUD lengkap:
- GET
/cars
untuk mendapatkan semua mobil - GET
/cars/:id
untuk mendapatkan mobil berdasarkan ID - POST
/cars
untuk menambahkan mobil baru - PUT
/cars/:id
untuk mengedit data mobil - DELETE
/cars/:id
untuk menghapus mobil
Kamu bisa menguji semua endpoint ini lewat Postman atau Insomnia. Pastikan kamu menyetel header Content-Type: application/json
untuk request POST dan PUT.
Cara Melakukan Uji Coba API Backend Node.js Menggunakan Postman
Setelah kamu menyelesaikan pembuatan backend katalog sewa mobil berbasis file JSON, langkah selanjutnya adalah mengujinya menggunakan Postman. Postman adalah aplikasi yang sangat membantu untuk mencoba dan mengevaluasi API secara manual.
Kamu bisa kirim request, lihat respons, dan memastikan setiap endpoint bekerja seperti yang diharapkan.
Sebelum membuka Postman, pastikan server kamu sedang berjalan dengan menjalankan:
node server.js
Setelah itu, buka aplikasi Postman dan ikuti cara berikut untuk mencoba tiap endpoint:
Menguji GET semua mobil
- Pilih metode
GET
- Masukkan URL
http://localhost:3000/cars
- Klik toambol
Send
- Respons yang keluar harus berupa array mobil seperti:
[
{
"id": 1,
"name": "Toyota Avanza",
"year": 2020,
"price_per_day": 350000
},
{
"id": 2,
"name": "Honda Brio",
"year": 2021,
"price_per_day": 300000
}
]
Menguji GET mobil berdasarkan ID
- Pilih metode
GET
- Masukkan URL
http://localhost:3000/cars/1
- Klik
Send
- Respons yang keluar:
{
"id": 1,
"name": "Toyota Avanza",
"year": 2020,
"price_per_day": 350000
}
Menguji POST untuk menambahkan mobil baru
- Pilih metode
POST
- Masukkan URL
http://localhost:3000/cars
- Klik tab
Body
→ pilihraw
→ pilihJSON
- Isi konten seperti ini:
{
"name": "Nissan Serena",
"year": 2022,
"price_per_day": 400000
}
- Klik
Send
- Respons akan menampilkan data mobil baru yang sudah diberi ID:
{
"name": "Nissan Serena",
"year": 2022,
"price_per_day": 400000,
"id": 100001
}
Menguji PUT untuk mengupdate mobil
- Pilih metode
PUT
- Masukkan URL
http://localhost:3000/cars/1
- Klik tab
Body
→ pilihraw
→ pilihJSON
- Isi konten:
{
"price_per_day": 375000
}
- Klik
Send
- Respons:
{
"id": 1,
"name": "Toyota Avanza",
"year": 2020,
"price_per_day": 375000
}
Menguji DELETE untuk menghapus mobil
- Pilih metode
DELETE
- Masukkan URL
http://localhost:3000/cars/1
- Klik
Send
- Respons:
{
"id": 1,
"name": "Toyota Avanza",
"year": 2020,
"price_per_day": 375000
}
Setelah kamu coba semua endpoint di atas dan hasilnya sesuai harapan, artinya sistem backend kamu sudah bekerja dengan baik. Pastikan untuk melakukan testing secara berkala saat menambahkan fitur baru agar tidak ada yang rusak.
Postman juga memungkinkan kamu menyimpan request untuk digunakan ulang, jadi sangat berguna saat pengembangan jangka panjang.
Penutup dan Saran untuk Backend Developer Pemula yang Ingin Kerja Remote
Belajar membuat backend dari nol memang nggak instan. Tapi dengan konsistensi dan struktur belajar yang benar, kamu bisa banget jadi backend developer yang siap kerja secara remote, bahkan dari rumah sendiri.
Project sederhana seperti sistem katalog sewa mobil berbasis file JSON ini adalah titik awal yang bagus banget. Kamu bisa belajar banyak hal mulai dari routing, struktur folder, cara kerja server, sampai CRUD API—semuanya real dan langsung dipraktikkan.
Kalau kamu merasa belajar sendiri bikin bingung dan butuh arahan yang jelas, jangan khawatir. Di BuildWithAngga, kamu bisa belajar langsung bareng mentor expert yang sudah berpengalaman bertahun-tahun di dunia backend dan kerja remote.
Kursus yang kami siapkan nggak cuma teori doang, tapi berbasis proyek nyata, dengan penjelasan yang mudah dipahami dan step-by-step.
Benefit belajar bareng mentor di BuildWithAngga antara lain:
- Belajar dari mentor yang pernah kerja di startup besar dan luar negeri
- Materi project-based, bukan teori kosong
- Sertifikat resmi yang bisa kamu pakai untuk melamar kerja remote
- Akses ke komunitas belajar, tanya jawab, dan sharing job opportunity
- Update materi sesuai tren industri backend terbaru
- aaa
- Ada latihan interview & review portofolio biar kamu lebih siap ke dunia kerja
Dunia kerja remote itu real, dan terbuka lebar buat siapa aja yang siap. Jadi daripada cuma jadi penonton, mending kamu ikut mulai dari sekarang. Bangun skill-mu, buat portofolio backend-mu, dan persiapkan diri untuk masuk ke dunia kerja global bareng BuildWithAngga. 🚀