Skip to content

Instantly share code, notes, and snippets.

@birowo
Last active November 22, 2016 06:02
Show Gist options
  • Save birowo/21387229aa17cc38e67c7e95b5751c59 to your computer and use it in GitHub Desktop.
Save birowo/21387229aa17cc38e67c7e95b5751c59 to your computer and use it in GitHub Desktop.
tutorial belajar node.js untuk pemula

tutorial belajar node.js untuk pemula

membuat & memahami webserver

buat file skrip namai webserver.js (simpan misal di folder latihan yang sudah kita buat) sbb. :

'use strict';

//method parse dari modul url dipakai untuk memecah url menjadi bagian pathname dan bagian query
const urlParse = require('url').parse;

//method stringify dari modul querystring dalam kasus ini dipakai untuk memformat tampilan obyek rekues headers & kueri url
const qsStringify = require('querystring').stringify;

//perlu modul http yang akan dipakai untuk membuat webserver
const http = require('http');

//create webserver
const webserver = http.createServer();

//jika client/browser mengakses webserver(berarti on 'request' event dipicu) maka fungsi rekuescb callback dipanggil/dieksekusi
function rekuesCB(rekues, respon){
  //property statusCode dipakai untuk menentukan http status code respon
  respon.statusCode = 200;
  //method setHeader dipakai untuk menentukan key , value http header respon
  respon.setHeader('Content-Type', 'text/html; charset=UTF-8');
  //method write dipakai untuk menentukan bagian data yang akan dikirim ke klien/browser
  //seperti perintah echo kalau di PHP
  respon.write('<b>rekues method: </b>'+rekues.method+'<br>');
  respon.write('<b>rekues url: </b>'+rekues.url+'<br>');
  //mem- parse url menjadi bagian pathname (yang dipakai untuk routing) &
  //bagian data kueri(yang akan diproses oleh fungsi handler yang ada di bagian routing)
  const url = urlParse(rekues.url, true);
  respon.write('<b>url pathname: </b>'+url.pathname+'<br>');
  respon.write('<b>url kueri:</b><br>');
  respon.write(decodeURIComponent(qsStringify(url.query, '<br>', ': ')));
  respon.write('<br>');
  respon.write('<b>rekues headers:</b><br>');
  respon.write(decodeURIComponent(qsStringify(rekues.headers, '<br>', ': ')));
  //method end dipakai untuk mengakhiri write(setelah respon.end tidak ada lagi respon.write)
  respon.end();
}

//menautkan event http rekues dengan fungsi rekuesCB callback handler -nya
webserver.on('request', rekuesCB);

//pilih port lain, jika port 80 sudah dipakai oleh aplikasi lain
const PORT = 80;

//method listen dipakai untuk menjalankan webserver yang kita buat dengan PORT yang kita pilih
webserver.listen(PORT);

jalankan skrip dengan mengetikkan perintah di terminal(Command Prompt):

c:\Users\lenovo\nodejs\latihan>node webserver

kemudian Enter

buka browser dan akses: http://localhost/segment1/segment2?key1=val1&key2=val2&key3=val3

nodejslocalhost1

bagian - bagian url:

/segment1/segment2 adalah bagian pathname

key1=val1&key2=val2&key3=val3 adalah bagian querystring

coba akses localhost dengan mengubah - ubah nilai bagian pathname & bagian querystring -nya dan lihat hasilnya di browser

Semoga anda sudah bisa memahami cara mendapatkan data url(query & pathname) & http rekues headers yang dikirim klien/browser ke webserver

kode skrip di atas juga bisa dituliskan seperti ini:

'use strict';

const urlParse = require('url').parse;

const qsStringify = require('querystring').stringify;

const http = require('http');

const webserver = http.createServer(function(rekues, respon){

  respon.writeHead(200, {'Content-Type': 'text/html; charset=UTF-8'});
  
  const url = urlParse(rekues.url, true);
  
  let echo = '<b>rekues method: </b>'+rekues.method+'<br>';
  echo += '<b>rekues url: </b>'+rekues.url+'<br>';
  echo += '<b>url pathname: </b>'+url.pathname+'<br>';
  echo += '<b>url kueri:</b><br>';
  echo += decodeURIComponent(qsStringify(url.query, '<br>', ': '))+'<br>';
  echo += '<b>rekues headers:</b><br>';
  echo += decodeURIComponent(qsStringify(rekues.headers, '<br>', ': '));
  
  respon.end(echo);
  
});

const PORT = 80;

webserver.listen(PORT);

pembahasan selanjutnya mengenai routing

@birowo
Copy link
Author

birowo commented Nov 21, 2016

komen

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment