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");