Proyek sebelumnya bekerja sepenuhnya di dalam mongosh; sekarang kita pindah ke sisi aplikasi. Kita membangun REST API manajemen tugas — backend untuk aplikasi pencatat tugas tim — memakai Node.js dan driver mongodb resmi, tanpa framework web apa pun. Router HTTP, parsing body, validasi, sampai autentikasi kita tulis di atas node:http murni agar mekanisme di balik framework seperti Express terlihat jelas.

Proyek ini memosisikan kita sebagai pengembang backend yang menerjemikan kebutuhan tim menjadi endpoint: membuat tugas, memindahkan status todo → doing → done, menghapus tugas lama, dan membatasi akses lewat API key beserta peran pengguna.

Tujuan Proyek #

Setelah menyelesaikan proyek ini, kita memiliki API produksi-mini dengan karakteristik berikut:

  • Koneksi terkelola: satu pool koneksi singleton yang dibagikan ke seluruh handler, dengan konfigurasi lewat variabel lingkungan.
  • REST penuh untuk resource tugas: GET/POST/PUT/DELETE /tugas dengan filter status, pagination, dan unique index pada kode.
  • Validasi manual bergaya $jsonSchema: field wajib, tipe, panjang, dan enum diperiksa sebelum data menyentuh database; field tak dikenal dibuang.
  • Format error konsisten: kesalahan klien (400), tugas hilang (404), duplikat E11000 (409), dan kegagalan server (500) semuanya memakai satu bentuk amplop JSON.
  • Autentikasi API key: header X-API-Key, hash SHA-256 di database, perbandingan waktu-konstan timingSafeEqual, serta pembatasan DELETE untuk peran admin.

Prasyarat #

Proyek ini memadukan materi tiga Section sebelumnya. Pastikan kita sudah memahami:

  • MongoDB dengan Node.js — terutama chapter Menggunakan MongoDB Driver (MongoClient, operasi CRUD driver) dan Struktur Aplikasi Node.js (pemisahan modul).
  • Integrasi Aplikasi — chapter Connection Pooling, Environment Configuration, Repository Pattern, dan Error Handling yang semuanya dipraktikkan di sini.
  • Keamanan — chapter Authentication, Credential Management, dan Security Checklist menjadi rujukan Bagian 4.

Server yang dipakai tetap replika lingkungan Course: single-node replica set rs0 di 127.0.0.1:27017. Driver yang dipakai adalah mongodb 7.7 pada Node.js 24.

Hasil Akhir #

BerkasPeran
src/db.jsKoneksi singleton + pool, bisa diping langsung
src/tugas.jsRepository: seluruh akses data collection tugas
src/validasi.jsSkema dan pemeriksaan payload
src/users.jsPengguna, pembuatan API key, verifikasi
src/server.jsRouter node:http + handler + lapisan error dan auth
tests/api-tes.jsSuite tes mandiri; mencetak SEMUA TES LULUS

Peta Bagian #

Proyek dikerjakan dalam empat bagian berurutan — setiap bagian menambah satu lapisan pada server yang sama:

  1. Bagian 1 — Koneksi Database: struktur proyek, db.js singleton, variabel lingkungan, dan uji ping.
  2. Bagian 2 — CRUD API: router HTTP, repository tugas, dan endpoint lengkap.
  3. Bagian 3 — Validation dan Error Handling: validasi payload serta format error seragam, termasuk pemetaan E11000 menjadi 409.
  4. Bagian 4 — Authentication dan Security: API key, peran pengguna, dan catatan pengerasan untuk produksi.

Menjalankan Kode Proyek #

Buat folder proyek dengan struktur berikut — setiap berkas diunduh dari bagian yang sesuai:

text
api-manajemen-tugas/
├── src/
│   ├── db.js
│   ├── tugas.js
│   ├── validasi.js
│   ├── users.js
│   └── server.js
└── tests/
    └── api-tes.js

Instal dependensi lalu jalankan server dan suite tes dari folder proyek:

bash
npm init -y
npm install mongodb@7
node src/server.js        # API di http://127.0.0.1:3000
node tests/api-tes.js     # suite tes mandiri

Suite tes memakai database proyek_api_tugas_tes yang dibersihkan sendiri, sementara server berjalan di database proyek_api_tugas — keduanya tidak saling mengganggu.