Panduan Lengkap Organisasi Folder Node/Express untuk Backend yang Scalable
Struktur folder yang baik adalah fondasi backend yang maintainable, scalable, dan mudah dipahami tim. Artikel ini membahas standar industri untuk mengorganisasi proyek Node.js/Express, lengkap dengan penjelasan setiap komponen dan alur request.
Folder Structure
Berikut adalah struktur folder yang direkomendasikan untuk proyek backend Node/Express:
backend/
├── node_modules/ # Installed packages and dependencies
├── src/
│ ├── config/ # Database and environment setup
│ ├── controllers/ # Handle HTTP requests and responses
│ ├── middlewares/ # Auth, logging, validation, etc.
│ ├── models/ # Database schemas and data structures
│ ├── routes/ # API endpoints mapped to controllers
│ ├── services/ # Business logic and integrations
│ ├── utils/ # Reusable helper functions
│ └── redis/ # Caching and Redis connection (if used)
├── app.js # Configure Express app and middleware
├── server.js # Start server and listen on port
├── .env # Secret keys and environment variables (never commit)
├── .gitignore # Files Git should ignore
├── package.json # Scripts and dependencies
└── README.md # Project documentation
Penjelasan per Komponen
| Komponen | Fungsi |
|---|---|
| config/ | Setup database, environment variables, dan konfigurasi global lainnya |
| controllers/ | Menangani HTTP request dan response — entry point untuk setiap endpoint |
| middlewares/ | Auth, logging, validation, error processing — berjalan sebelum/sesudah controller |
| models/ | Definisi database schema dan data structures |
| routes/ | Mapping API endpoints ke controller yang sesuai |
| services/ | Business logic, integrasi eksternal, dan pemrosesan data kompleks |
| utils/ | Reusable helper functions — fungsi kecil yang dipakai lintas modul |
| redis/ | Caching layer dan koneksi Redis (opsional, jika digunakan) |
Tips:
app.js dan server.jsdipisah agar testing lebih mudah — app.js export Express app tanpa listen, sementara server.js yang bertugas start server.Root Files
| File | Fungsi |
|---|---|
app.js | Configure Express app, mount middleware, setup routes |
server.js | Start server dan listen pada port tertentu |
.env | Secret keys dan environment variables — JANGAN pernah di-commit |
.gitignore | Daftar file/folder yang diabaikan Git (node_modules, .env, dll) |
package.json | Scripts, dependencies, dan metadata project |
README.md | Dokumentasi project — cara install, setup, dan run |
Request Flow
Berikut adalah alur lengkap satu HTTP request dari client hingga response:
Client→Route→Middleware→Controller→Service→Model / Database→Response
Detail Alur Request
- 1. Client — Mengirim HTTP request (GET, POST, PUT, DELETE, dll)
- 2. Route — Mencocokkan URL dan method ke handler yang sesuai
- 3. Middleware — Auth check, logging, validation, parsing body — berjalan sebelum controller
- 4. Controller — Menerima request, validasi input, memanggil service
- 5. Service — Business logic, integrasi eksternal, transformasi data
- 6. Model / Database — Query database, create/read/update/delete data
- 7. Response — Data dikembalikan ke client sebagai JSON
Contoh Implementasi
app.js
// app.js - Configure Express app
const express = require('express');
const app = express();
app.use(express.json());
app.use('/api/users', userRoutes);
module.exports = app;
server.js
// server.js - Start server
const app = require('./app');
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Server running on port ${PORT}`);
});
Prinsip Penting
- Separation of Concerns — Setiap folder punya tanggung jawab jelas
- Single Responsibility — Setiap file/module hanya melakukan satu hal
- Reusability —
utils/danservices/bisa dipakai lintas fitur - Testability —
app.jsterpisah dariserver.jsmembuat testing lebih mudah - Scalability — Struktur ini mudah dikembangkan saat project bertambah besar
Remember: Konsistensi lebih penting daripada kesempurnaan. Pilih satu struktur, patuhi, dan dokumentasikan di README agar seluruh team memahami.
No comments:
Post a Comment