NODE.JS | HTTP NODE.JS


Pada pembahasan kali ini kita akan belajar memulai menggunakan Node.js . Biasanya setiap implementasi pengenalan bahasa pemrograman baru adalah pembuatan tampilan "hello world", meskipun pada pembahasan sebelumnya saya telah mencontohkan penggunaan Javascript dengan template WebMatrix ,  tapi tak ada salahnya kita memulai kembali penggunaan Node.Js ini. Langsung saja ke Text editor dan buatlah suatu folder kosong tempat dimana sobat akan menaruh file berekstensi javascript, misal saya contohkan disini akan saya buat folder dengan nama nodejs dan membuat satu file dengan nama contoh.js , ketikan baris perintah seperti berkut berikut ;

console.log('hello world')

pada tampilan diatas saya menggunakan IDE editor text Visual studio code, Sobat bebas mau menggunakan apa saja, pada intinya ketika kita membuat sebuah file berekstensi .js dan kita run di terminal/ command line maka pesan yang tercetak adalah sesuai dengan baris yang kita perintahkan, misalnya saya ingin mencobanya menggunakan terminal bawaan windows, maka langkahnya gampang saja, arahkan file tempat dimana file tersebut berada kemudian buka Comand propmt (contoh di windows) dan ketikan sama dengan baris perintah "node nama file" disini berarti "node contoh.js"


Nah sama kan hasilnya ?, makanya akan lebih mudah jika kita menggunakan code editor yang langsung terhubung dengan Terminal dengan alasan tidak terlalu sering alihan Tab , meski ini urusan selera.Oke lanjut ... ===> tadi kita sudah mencoba bagaimana printing /mencetak Hello world di terminal, selanjutnya kita akan mencoba yang lebih menarik yaitu dengan print di http atau di web browser , kita ketikan kodenya seperti ini :

[code hl="1, 4, 7"] var http = require('http'); var server = http.createServer(function(req, res) { res.writeHead(200); res.end('Hello,,,, ini adalah halaman pertama menggunakan http'); }); server.listen(8888); [/code]

maka ketika kita runing 



tampilan di browser




nah disini sobat paham kan bedanya Node.js dengan Framework selainnya ?,Framework lain biasanya memerlukan webserver bantu menggunakan Apache sedangkan  Node.js bisa membuat server sendiri . 

Pembacaan Method HTTP melaului ada 2 cara yaitu melalui url dan entity body, ketika menggunakan URL parameter yang diberikan  digunakan oleh GET sedang melalui entity body dalam HTTP request digunakan untuk POST dan PUT.

MELALUI URL
Untuk memahami syntaks URL dalam merequest menggunakan methhode GET dapat digambarkan melalui skema berrikut

<scheme>://<user>:<password>@<host>:<port>/<path>?<query>#<fragment>

dan jika diterapkan di browser contoh datanya misal sebagai berikut

https://bert:rahasia@contoh.com:8888/user/umum?id=scp-2017&access=17#desc



Bagian utama yang akan kita gunakan untuk membaca data pada method GET yaitu bagian dari query. Sintaks pembuatan query , yaitu:

      ?nama-parameter:nilai&nama-parameter:nilai&

Misalkan pada URL contoh di atas, terdapat dua buah data yang dikirimkan melalui URL, yaitu:

     Param   Nilai
     id         scp-2017
     access  17

Untuk pembacaan nilai query kita dapat menggunakan modul url yang telah diberikan oleh NodeJS. Modul ini memiliki tiga fungsi utama:

url.parse, membaca  string URL menjadi objek.
url.format,mengubah objek URL menjadi string jadi kebalikan dari url.parse.
url.resolve, melengkapi URL sesuai dengan cara browser pada tag a.

Fungsi yang akan kita gunakan untuk membaca nilai query yaitu url.parse, seperti berikut:

[code hl="1, 4, 7"] var url = require('url'); var url_obj = url.parse('https://bert:rahasia@contoh.com:8888/user/umum?id=scp-2017&access=17#desc', true); console.log(url_obj); /* { protocol: 'http:', slashes: true, auth: 'user:pass', host: 'contoh.com:8888', port: '8888', hostname: 'contoh.com', hash: '#desc', search: '?query=sample&data=123', query: { query: 'sample', data: '123' }, pathname: '/pa/th', path: '/pa/th?query=sample&data=123', href: 'https://bert:rahasia@contoh.com:8888/user/umum?id=scp-2017&access=17#desc' } */ [/code]

Dari Skema diatas,property yang akan diakses adalah url_obj.query. Fungsi url.parse sendiri dapat menerima tiga buah argumen, yaitu:


Argumen pertama, urlStr, diisikan string URL yang ingin diubah menjadi objek.Argumen kedua, parseQueryString, sebuah boolean yang digunakan untuk menentukan apakah query string akan diubah menjadi objek atau tidak. Jika tidak diisikan akan dianggap bernilai false.Argumen ketiga, slashesDenoteHost, jika diisikan dengan true akan membaca //foo/bar menjadi { host: 'foo', pathname: '/bar' } bukan nilai standar { pathname: '//foo/bar' }. Jika tidak diisi dianggap false.

Sehingga jika kita ingin melanjutkan kode di atas dengan mencoba langsung mengambil query kita dapat melakukan pemanggilan terhadap parameternya langsung:


  1.     console.log(url_obj.query);
  2.     // { query: 'sample', data: '123' }

Dengan menggunakan fungsi url.parse, pembacaan nilai parameter pada GET akan menjadi sangat mudah dan sederhana. Tiga property yang paling menarik dan sering digunakan yaitu pathname (tempat penyimpanan data dalam server), query (query string), dan hash (bagian spesifik dari dokumen).

PEMBACAAN DALAM ENTITY BODY


[code hl="1, 4, 7"] var data = ''; request.on('data', function (chunck) { data = data + chucnk; }); request.on('end', function () { // lakukan sesuatu terhadap variabel data // yang sudah lengkap }); [/code]
Dari kode di atas kita dapat melihat bagaimana mengambil data dari entity body Untuk request seperti PUT yang biasanya dikirimkan dalam bentuk data langsung, misalnya:
[code hl="1, 4, 7"] PUT /data/1234 HTTP/1.1 [berbagai header] [/code]

jika kita ambil datanya dari metode di atas maka variabel data akan berisi string XML sesuai dengan yang dikirimkan. Kita kemudian dapat menggunakan fungsi atau objek khusus untuk memproses string XML tersebut sesuai kebutuhan. Cara pemrosesan ini berlaku juga untuk request POST yang dikirimkan oleh client HTTP.
Mari kita lihat penggunakan querystring untuk membaca data pada entity body. Misalnya sebuah request:





Sebagai catatan juga bahwa meskipun format application/x-www-form-urlencoded dan multipart/form-data hanya digunakan untuk HTML Form standar, banyak client yang mengirimkan request POST, PUT, dan bahkan DELETE dengan menggunakan kedua format ini tanpa melalui form. Jika aplikasi server yang dikembangkan memang mendukung penggunaan request ini, cara pemrosesan yang digunakan tetap sama (dengan pustaka seperti node-multiparty). Meski demikian penggunaan cara seperti ini tidak disarankan, karena bertentangan dengan aturan standar.

 Penulisan HTTP Response menggunakan konsep penulisan stream yang sama dengan bahasa pemrograman pada umumnya, yakni NodeJS memberikan response objek bertipe http.ServerResponse, yang juga mengimplementasikan antarmuka stream.Writable  . stream.Writable  penulisan sedrhanannya melakukan 2 hal secara berurtan

  • memanggil fungsi stream.Writable.write , menerima dua parameter, yaitu string yang akan ditulis dan encoding dari string yang digunakan.
  •  Menutup stream dengan memanggil fungsi stream.Writable.end. Fungsi tidak menerima parameter.


dapat dilihat dari response sedrhana pada tampilan berikut :



kebalikan dari HTTP Server,HTTP Client pada NodeJS berfokus pada pembuatan HTTP Request dan pembacaan HTTP Response.Fungsi ini menerima 2 buah argumen yaitu Options dan Callback.

dalam pembacaan status code kita mengenal beberapa parameter , diantara yang paling banyak  ditampilkan biasanya :


code 100-199     ===> informational
code 200- 299    ===> Ini menandakan oke  / succes atau semua berjalan dengan baik
code 301 - 399      ===> redirection ? Moved (pindah),Alamat sudah berpindah permanent
code 400 - 499     ===>   halaman tidak dapat ditemukan
code 500 - 599    ===>  kesalahan pada sisi server (sibuk,mati dsb..)



Nah sekarang Paham kan bagaiana HTTP Request disimpan oleh NodeJS, serta bagaimana membaca data yang dikirimkan oleh HTTP Request ?.

jika Sobat membutuhkan referensi lengkapnya silahkan kunjungi halaman https://nodejs.org/en/docs/

Baca Juga


IDIARSO
IDIARSO

Menulis adalah kegiatan saya disela rutinitas kerja,silahkan berkomentar dibawah ini sebagai bahan masukan

Tidak ada komentar:

Posting Komentar