Parsing Body Request Menggunakan Nodejs (03)

Di post sebelumnya kita sudah belajar cara parsing bermacam-macam data menggunakan nodejs. Silahkan baca-baca dulu post sebelumnya supaya tidak membingungkan. Pada post kali ini kita akan mempelajari cara parsing body request atau kita sebut dengan payload. Cara nya akan lebih kompleks jika kita bandingkan dengan cara parsing data yang sudah kita pelajari sebelumnya.

Sebelum kita mulai, kita buat terlebih dahulu sebuah file sederhana untuk mendefinisikan sebuah http server , index.js, lalu copy paste skrip di bawah ini.

//gunakan module http
var http = require("http");

//buat variabel server untuk handle request dan respon
var server = http.createServer(function(request, respon) {
   
});

//start server dan listening di port 3000
server.listen(3000, function() {
  console.log("server nyala dan listening di port 3000");
});

Parsing Body Request Dengan String decoder

Tambahkan library string_decoder pada index.js. Library ini kita butuhkan untuk proses decoding data yang akan dikirim saat melakukan request ke http server.

var strDecoder = require("string_decoder").StringDecoder;
Kemudian buat object decoder dari string decoder di atas pada callback createServer.
//gunakan char set utf-8 untuk proses decoding
var decoder = new strDecoder('utf-8');
Body request merupakan bagian dari request yang dikirimkan ke http server dalam bentuk stream. Jadi kita perlu untuk menampung stream tersebut dari awal sampai pemberitahuan bahwa request telah berakhir. Jadi pertama-tama kita siapkan variabel untuk menampung stream terlebih dahulu.
//tampung stream ke variabel dataStream
var dataStream = '';
Lalu pada proses event ‘data‘, kita append variabel dataStream dengan data payload yang dikirim ke http server dalam bentuk stream.
//kumpulkan data stream pada variabel dataStream
request.on("data", function(data) {
    dataStream +=decoder.write(data);
});
Akhiri pengumpulan data stream pada event ‘end‘, lalu tampilkan dataStream sebagai respon server untuk kebutuhan testing bahwa pengiriman payload telah berhasil diterima.
//hentikan pengumpulan stream pada event end
request.on("end", function() {
    //pengumpulan stream dihentikan
    dataStream +=decoder.end();

    //kirim data payload sebagai respon server
    respon.end(dataStream);
});
Setelah penambahan skrip-skrip di atas, maka file index.js akhirnya akan seperti di bawah ini.
//gunakan module http
var http = require("http");
var strDecoder = require("string_decoder").StringDecoder;

//buat variabel server untuk handle request dan respon
var server = http.createServer(function(request, respon) {
  //gunakan char set utf-8 untuk proses decoding
  var decoder = new strDecoder("utf-8");

  //tampung stream ke variabel dataStream
  var dataStream = "";

  //kumpulkan data stream pada variabel dataStream
  request.on("data", function(data) {
    dataStream += decoder.write(data);
  });

  //hentikan pengumpulan stream pada event end
  request.on("end", function() {
      //pengumpulan stream dihentikan
      dataStream += decoder.end();

    //kirim data payload sebagai respon server
    respon.end(dataStream);
    //console.log("payload : ", buffer);
  });
});

//start server dan listening di port 3000
server.listen(3000, function() {
  console.log("server nyala dan listening di port 3000");
});

Jalankan aplikasi dengan mengetik perintah berikut ini.

node index.js

Saatnya kita lakukan percobaan. Silahkan buka postman, masukan url http://localhost:3000 lalu pada bagian body pilih jenis raw lalu masukan beberapa buah kata pada input yang tersedia (bebas, hanya untuk testing saja).

test parsing body request

Setelah itu klik tombol send, lalu lihat pada bagian output, jika berhasil maka akan tampil kalimat sesuai dengan kalimat yang kita kirim pada body request sebagai payload saat melakukan request ke http server.

respon server menerima payload

Sebagai tambahan bacaan, untuk memahami apa itu http request dan lain sebagai nya. Silahkan menuju link-link di bawah ini.

https://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html

https://developer.mozilla.org/en-US/docs/Web/HTTP/Messages

Semoga bermanfaat…

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *