Lompat ke konten utama
←

Backend Node.js Dasar: Rute, Middleware, dan Pengujian

Pelajaran 4 dari 16

Handler dan JSON: badan, validasi, galat

Membaca badan JSON permintaan

Setelah pelajaran ini kamu bisa menerima badan permintaan sebagai potongan dengan batas ukuran, memeriksa Content-Type, dan mengurai JSON dengan aman sehingga kesalahan klien dijawab 413, 415, atau 400.

±13 menitDiperiksa 23 Okt 2026

Latihan di pelajaran ini butuh akun gratis. Progres, kode, dan catatanmu hanya tersimpan di browser ini. Masuk untuk menyimpannya

Materi

Permintaan POST, PUT, dan PATCH membawa badan. Di Node.js badan tidak langsung tersedia: request adalah stream yang mengirim potongan data lewat event data, dan panduan Anatomy of an HTTP Transaction mengumpulkan potongan itu dalam larik lalu menggabungkannya menjadi teks saat event end. Express menyediakan middleware express.json yang melakukan pekerjaan itu sekaligus mengurai JSON. Di latihan, req.body sudah berupa teks gabungan, dan handler yang mengurainya.

let potongan = [];
request
  .on("data", (p) => potongan.push(p))
  .on("end", () => {
    const teks = Buffer.concat(potongan).toString();
    // baru di sini badan lengkap: '{"menu":"Kopi Susu","jumlah":3}'
  });

Membaca badan JSON di server punya tiga pemeriksaan. Pertama, ukuran: OWASP REST Security Cheat Sheet meminta batas ukuran permintaan dan penolakan 413 untuk yang melewatinya. Kedua, jenis isi: bagian Content-Type sebelum titik koma, tanpa membedakan huruf (RFC 9110 §8.3.1), harus application/json; selain itu 415 Unsupported Media Type. Ketiga, sintaks: MDN mencatat JSON.parse melempar SyntaxError untuk teks yang bukan JSON sah, termasuk teks kosong. Tangkap galat itu dan jawab 400 Bad Request, karena kesalahannya ada pada permintaan klien.

Respons galat di kelas ini berformat problem details (RFC 9457): Content-Type application/problem+json dan badan berisi title, status, dan detail. Cara memeriksa format itu dari sisi penguji ada di kelas Pengujian Kontrak API; di sini fungsi galat di kode awal yang membuatnya.

function galat(status, title, detail, tambahan = {}) {
  return { status, headers: { "content-type": "application/problem+json" }, body: { title, status, detail, ...tambahan } };
}

galat(415, "Unsupported Media Type", "Kirim badan sebagai application/json");

Latihan

0/3 lulus

Jawaban diperiksa di server. Lulus berarti kamu memahami contohnya, bukan penilaian seluruh pekerjaanmu.

Latihan 3 dari 3

Aplikasi kasir mengirim POST /pesanan dengan Content-Type application/json dan badan {"jumlah": 2,} (ada koma berlebih). Handler di server menjalankan const data = JSON.parse(req.body) tanpa try, dan penangkap galat server menjawab 500 untuk galat apa pun yang lolos dari handler. Status apa yang diterima klien, dan status apa yang semestinya?

Pilih satu jawaban

Catatanmu

Memuat catatan…

tersimpan otomatis, ikut tercetak · 0/4.000

Luluskan semua latihan dulu untuk menandai pelajaran ini selesai.

Lanjutkan ke

Tampilkan 1 lagi