Struktur folder bukan soal gaya, tapi soal keberlanjutan proyek. Backend yang awalnya kecil bisa tumbuh menjadi besar dan kompleks. Tanpa struktur yang jelas, kode akan sulit dibaca, susah dirawat, dan rawan bug.
Struktur folder yang baik membantu:
- memisahkan tanggung jawab kode
- memudahkan kolaborasi tim
- mempercepat debugging dan pengembangan
Ini adalah kebiasaan profesional yang wajib dibangun sejak awal.
Contents
- 1 Masalah Umum Backend Tanpa Struktur
- 2 Struktur Folder Backend Sederhana tapi Benar
- 3 Folder routes: Mengatur Endpoint API
- 4 Folder controllers: Pusat Logika Request
- 5 Folder services: Logika Bisnis Aplikasi
- 6 Folder models: Representasi Data
- 7 Folder middlewares: Middleware Terpisah dan Rapi
- 8 File app.js: Konfigurasi Aplikasi Express
- 9 File index.js: Entry Point Aplikasi
- 10 Contoh Alur Request dalam Struktur Ini
- 11 Tips Menjaga Struktur Tetap Rapi
- 12 Kesimpulan
- 13 Related Posts
Masalah Umum Backend Tanpa Struktur
Ciri backend yang tidak terstruktur:
- semua route di satu file
- logic bisnis bercampur dengan routing
- sulit menambahkan fitur baru
Contoh buruk (hindari):
index.js
Semua kode menumpuk di satu file. Awalnya terlihat mudah, tapi cepat menjadi mimpi buruk.
Struktur Folder Backend Sederhana tapi Benar
Struktur dasar yang cocok untuk pemula hingga menengah:
backend/
├── src/
│ ├── routes/
│ ├── controllers/
│ ├── services/
│ ├── middlewares/
│ ├── models/
│ └── app.js
├── index.js
├── package.json
Struktur ini sudah cukup rapi dan mudah dikembangkan.
Folder routes: Mengatur Endpoint API
Folder routes berisi daftar endpoint tanpa logika berat.
// routes/userRoutes.js
import express from "express";
import { getUsers } from "../controllers/userController.js";
const router = express.Router();
router.get("/", getUsers);
export default router;
Routes sebaiknya hanya bertugas menerima request dan meneruskannya.
Folder controllers: Pusat Logika Request
Controller menangani logika request dan response.
// controllers/userController.js
export function getUsers(req, res) {
res.json({
users: []
});
}
Controller membuat kode lebih bersih dan terorganisir.
Folder services: Logika Bisnis Aplikasi
Services berisi logika inti aplikasi.
// services/userService.js
export function fetchUsers() {
return [];
}
Jika aplikasi berkembang, service bisa terhubung ke database atau API lain.
Folder models: Representasi Data
Models digunakan untuk:
- struktur data
- schema database
- validasi data
Contoh sederhana:
// models/userModel.js
export const User = {
id: Number,
name: String
};
Pada tahap selanjutnya, model biasanya terhubung dengan ORM.
Folder middlewares: Middleware Terpisah dan Rapi
Middleware sebaiknya tidak ditulis langsung di index.js.
// middlewares/authMiddleware.js
export function auth(req, res, next) {
if (!req.headers.authorization) {
return res.status(401).json({
message: "Unauthorized"
});
}
next();
}
Pendekatan ini membuat middleware bisa digunakan ulang.
File app.js: Konfigurasi Aplikasi Express
app.js berisi konfigurasi utama Express.
import express from "express";
import userRoutes from "./routes/userRoutes.js";
const app = express();
app.use(express.json());
app.use("/users", userRoutes);
export default app;
File ini fokus pada setup, bukan logika bisnis.
File index.js: Entry Point Aplikasi
index.js digunakan untuk menjalankan server.
import app from "./src/app.js";
app.listen(3000, () => {
console.log("Server berjalan di port 3000");
});
Dengan pemisahan ini, kode lebih mudah diuji dan dirawat.
Contoh Alur Request dalam Struktur Ini
Alur request:
- client memanggil
/users - route menerima request
- controller memproses data
- service menjalankan logika
- response dikirim ke client
Alur ini jelas dan mudah diikuti.
Tips Menjaga Struktur Tetap Rapi
Beberapa tips penting:
- satu file satu tanggung jawab
- jangan taruh logika di route
- konsisten dalam penamaan
Struktur rapi lebih penting daripada sekadar cepat jadi.
Kesimpulan
Struktur folder adalah fondasi backend Node.js yang sehat. Dengan struktur yang benar, kita bisa:
- mengembangkan fitur tanpa kekacauan
- bekerja dalam tim dengan nyaman
- mempersiapkan aplikasi untuk skala besar
Bab ini menjadi bekal penting sebelum masuk ke database, autentikasi, dan deployment.