Materi
Handler yang langsung mengolah larik global sulit diuji dan sulit dipindah ke basis data. Pola repositori menyembunyikan penyimpanan di balik beberapa method: daftar, ambil, tambah, ubah, hapus. Handler hanya memanggil method itu, sehingga penyimpanannya bisa diganti tanpa mengubah handler. Di kelas ini penyimpanannya Map di memori. MDN mencatat Map menyimpan pasangan kunci–nilai dengan kunci unik dan mengingat urutan sisip. Isinya hilang saat proses Node berhenti; data yang harus bertahan disimpan di basis data.
function buatRepoPelanggan() {
const isi = new Map();
let berikut = 1;
return {
tambah(data) {
const baru = { ...data, id: berikut++ };
isi.set(baru.id, baru);
return { ...baru };
},
ambil(id) {
const p = isi.get(id);
return p ? { ...p } : null;
},
};
}Tiga keputusan membuat repositori itu aman dipakai. Nomor id diberikan dari penghitung di dalam closure, bukan dari panjang larik, sehingga nomor yang sudah dihapus tidak dipakai ulang. Field id kiriman klien ditimpa. Setiap method mengembalikan salinan; spread membuat salinan dangkal (MDN), sehingga kode yang mengubah objek hasil ambil tidak ikut mengubah isi penyimpanan.
Handler menerjemahkan hasil repositori menjadi status: null dari ambil menjadi 404, tambah menjadi 201 dengan Location menunjuk item baru (RFC 9110 §15.3.2), dan hapus yang berhasil menjadi 204 tanpa badan, karena MDN menyatakan respons 204 tidak boleh membawa isi. Mulai modul ini, middleware JSON dianggap sudah mengurai badan ke req.data, padanan middleware express.json yang mengurai badan JSON di Express.