RESPONSE BODY NODEJS

Response Body


Header respons menampung informasi respons server, seperti status respons, MIME types, tanggal, atau informasi lainnya yang mungkin dibutuhkan oleh client. 



Header hanya berisi metadata atau informasi yang menjelaskan data utama, bukan informasi apa pun.

Selain header, HTTP respons juga membawa body, seperti yang kita ketahui dari materi pola komunikasi client dan server. Data utama, atau konten, seharusnya disimpan di dalam body ini.

Ingatlah bahwa objek response pada parameter fungsi request listener adalah instance dari http.serverResponse, yang merupakan WritableStream. Masih ingat cara menulis data pada WritableStream? Itu adalah metode yang digunakan untuk menulis data pada body response.

Seperti objek WritableStream lainnya, untuk menuliskan data pada respons kita bisa gunakan method response.write() dan diakhiri dengan method response.end().

const requestListener = (request, response) => {
    response.write('<html>');
    response.write('<body>');
    response.write('<h1>Hello, World!</h1>');
    response.write('</body>');
    response.write('</html>');
    response.end();
};



Seperti yang sudah kita ketahui sebelumnya, method end() pada WritableStream dapat digunakan untuk menulis data terakhir sebelum proses penulisan diakhiri. Oleh karena itu, untuk situasi di atas, penulisannya dapat dipersingkat menjadi seperti ini.

const requestListener = (request, response) => {
    response.end('<html><body><h1>Hello, World!</h1></body></html>');
};



Ketahuilah bahwa penting untuk menuliskan status dan header response sebelum Anda menuliskan data pada body. Karena tidak masuk akal bila Anda sudah menuliskan body, namun belum memberikan metadata terkait data apa yang hendak dikirim.

Latihan Mengubah Data pada Body Response

Di latihan sebelumnya kita sudah mengubah properti Content-Type pada header menjadi application/json. Namun untuk konten yang dikirim server pada body, masih berformat HTML. Nah, pada latihan kali ini kita akan mengubah konten pada body menjadi format JSON. Ayo kita eksekusi!

Pastikan kita tahu dan memahami apa itu JSON dan cara menulisnya. Jika tidak, silakan pelajari materi format request dan response.

Ketentuannya begini, setiap JSON yang akan kita kirimkan harus memiliki message. Nilai properti message akan diisi dengan pesan yang sebelumnya kita berikan dalam format HTML. Untuk lebih jelasnya, berikut contoh response body ketika client meminta halaman yang tidak ditemukan.

{
    "message": "Halaman tidak ditemukan!"
}



Sudah paham? Yuk langsung saja kita buka kembali server.js.

Kita ubah konten yang mudah dahulu yah, lebih tepatnya ketika client mengakses halaman yang tidak ditemukan. Silakan ubah kode ini:

response.end('<h1>Halaman tidak ditemukan!</h1>');


Menjadi:

response.end(JSON.stringify({
    message: 'Halaman tidak ditemukan!',
}));



Karena response.end() menerima string (atau buffer), maka kita perlu mengubah objek JavaScript menjadi JSON string menggunakan JSON.stringify().

Mari kita coba dulu perubahan yang ada. Simpan perubahan pada berkas server.js; jalankan ulang server dengan perintah npm run start; dan coba lakukan permintaan ke alamat selain ‘/’ atau ‘/about’. Seharusnya, server akan merespons konten dengan format JSON.

curl -X GET http://localhost:5000/anything
// output: { "message":"Halaman tidak ditemukan!"}
curl -X GET http://localhost:5000/test
// output: { "message":"Halaman tidak ditemukan!"}



Mantap! Silakan lanjut ubah format pesan untuk respons yang lain juga yah. Hingga fungsi request listener pada server.js tampak seperti ini:

const requestListener = (request, response) => {
    response.setHeader('Content-Type', 'application/json');
    response.setHeader('X-Powered-By', 'NodeJS');
 
    const { method, url } = request;
 
    if(url === '/') {
        if(method === 'GET') {
            response.statusCode = 200;
            response.end(JSON.stringify({
                message: 'Ini adalah homepage',
            }));
        } else {
            response.statusCode = 400;
            response.end(JSON.stringify({
                message: `Halaman tidak dapat diakses dengan ${method} request`,
            }));
        }
    } else if(url === '/about') {
        if(method === 'GET') {
            response.statusCode = 200;
            response.end(JSON.stringify({
                message: 'Halo! Ini adalah halaman about',
            }));
        } else if(method === 'POST') {
            let body = [];
    
            request.on('data', (chunk) => {
                body.push(chunk);
            });
 
            request.on('end', () => {
                body = Buffer.concat(body).toString();
                const { name } = JSON.parse(body);
                response.statusCode = 200;
                response.end(JSON.stringify({
                    message: `Halo, ${name}! Ini adalah halaman about`,
                }));
            });
        } else {
            response.statusCode = 400;
            response.end(JSON.stringify({
                message: `Halaman tidak dapat diakses menggunakan ${method}, request`
            }));
        }
    } else {
        response.statusCode = 404;
        response.end(JSON.stringify({
            message: 'Halaman tidak ditemukan!',
        }));
    }
};



Well done! Simpan perubahan pada berkas server.js; jalankan ulang server dengan perintah npm run start; dan coba lakukan lagi permintaan ke server menggunakan cURL. Server saat ini akan merespon dengan JSON sepenuhnya.

curl -X GET http://localhost:5000/
// output: {"message":"Ini adalah homepage"}
curl -X GET http://localhost:5000/about
// output: {"message":"Halo! ini adalah halaman about"}
curl -X DELETE http://localhost:5000/
// output: {"message":"Halaman tidak dapat diakses dengan DELETE request"}






Posting Komentar

0 Komentar