Routing Request Nodejs Tanpa Framework (04)

Pada post kali ini kita akan belajar cara membuat router atau manajemen routing request pada nodejs. Kita tinggalkan dulu framework nodejs yang memberikan kemudahan dalam membuat router, kita akan buat router tanpa bantuan framework. Ohya, sebelum mulai mungkin seharusnya kita sudah mengenal terlebih dahulu apa itu callback. Karena ke depan nya kita akan sering sekali berhubungan dengan callback. Jika belum tahu apa itu callback silahkan baca-baca dulu di sini dan di sini mudah-mudahan bisa memberikan gambaran mengenai callback dan penggunaan nya.

Buat Http server

Buat file dengan nama index.js yang berisikan skrip untuk membuat dan menjalankan http server dengan nodejs.

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

//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 Url Untuk Routing Request

Parsing url request untuk mengetahui routing yang harus dieksekusi oleh aplikasi.

//buat variabel server untuk handle request dan respon
var server = http.createServer(function(request, respon) {
  //parsing url request
  var parsedUrl = url.parse(request.url, true);
  var path = parsedUrl.pathname;
  var trimmedPath = path.replace(/^\/+|\/+$/g, "");

});

Pada skrip di atas, ketika kita mengakses url http://localhost/sample maka variabel trimmedPath adalah ‘sample‘.

Manajemen Routing Request Nodejs

Untuk membuat manajemen routing request pada nodejs, pertama-tama kita buat sebuah objek untuk routing handlers

var handlers = {}

Setiap route akan kita definisikan dalam objek handlers di atas dalam bentuk fungsi. Untuk kebutuhan sample kita akan buat tiga buah handler saja yaitu handler test , handler halo dan handler notfound. Dimana handler test akan menghandle request url /test, handler halo akan menghandle request url /halo sedangkan handler notfound akan menghandle request url selain kedua url tersebut. Tulis skrip berikut di bagian paling bawah setelah skrip start server atau listen server.

//test handler
handlers.test = function(myCallback) {
  //callback(statusCode, objek)
  myCallback(200, { handler: "test handler" });
};

//halo handler 
handlers.halo = function(myCallback) { 
   //callback(statusCode, objek) 
   myCallback(200, { handler: "halo handler" }); 
};

//notfound handler
handlers.notfound = function(myCallback) {
  //callback(statusCode,objek)
  myCallback(404,{ handler: "tidak ditemukan" });
};

Pada setiap handler di atas, kita akan mengeksekusi callback dengan 2 buah parameter yaitu statusCode dan sebuah objek untuk kita kirim sebagai respon server (hanya contoh, pada prakteknya akan lebih kompleks dari ini). Setelah handler siap, selanjutnya kita buat sebuah variabel router untuk menampung semua handlers.

//definisikan router yang berisi handler
var router = {
  test : handlers.test,
  halo : handlers.halo
};

Seperti yang bisa kita lihat, kita hanya memasukan dua handler saja, karena handler notfound akan kita buat sebagai handler default jika request url tidak ditemukan handler nya.

Kita kembali ke fungsi createServer. Sebelumnya kita sudah memiliki variabel trimmedPath yang berisikan informasi request url yang sudah diparsing. Kita cek apakah ada handler yang sesuai dengan trimmedPath tersebut. Jika ada, maka eksekusi callback pada handler yang sesuai tetapi jika tidak ada, eksekusi handler notfound.

//cek path request ke router
var currentHandler = typeof router[trimmedPath] !== "undefined" ? router[trimmedPath] : handlers.notfound;

Setelah mendapatkan handler sesuai request, jalankan handler bersangkutan dengan cara seperti di bawah ini.

//jalankan handler yg sesuai request
//eksekusi callback myCallbakc(code,obj)
  currentHandler(function(code, obj) {
    respon.writeHead(code);
    respon.end(JSON.stringify(obj));
  });

Setelah penambahan beberapa skrip di atas, maka file index.js akan menjadi seperti di bawah ini.

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

//buat variabel server untuk handle request dan respon
var server = http.createServer(function(request, respon) {
  //parsing url request
  var parsedUrl = url.parse(request.url, true);
  var path = parsedUrl.pathname;
  var trimmedPath = path.replace(/^\/+|\/+$/g, "");

  //cek path request ke router
  var currentHandler =
    typeof router[trimmedPath] !== "undefined"
      ? router[trimmedPath]
      : handlers.notfound;

  //jalankan handler yg sesuai request
  currentHandler(function(code, obj) {
    // Return data tipe json 
    respon.setHeader("Content-Type", "application/json");
    
    respon.writeHead(code);
    respon.end(JSON.stringify(obj));
  });
});

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

//definisikan handler
var handlers = {};

//sample handler
handlers.test = function(myCallback) {
  //callback(statusCode,objek)
  myCallback(200, { handler: "test handler" });
};

//halo handler
handlers.halo = function(myCallback) {
  //callback(statusCode,objek)
  myCallback(200, { handler: "halo handler" });
};

//notfound handler
handlers.notfound = function(myCallback) {
  //callback(statusCode,objek)
  myCallback(404, { handler: "handler tidak ditemukan" });
};

//definisikan router yang berisi handler
var router = {
  test: handlers.test,
  halo: handlers.halo
};

sekarang silahkan test memakai postman,

http://localhost:300/test

http://localhost:300/halo

http://localhost:300/index

routing request halo handler

request notfound

 

Contoh routing request pada nodejs selesai sampai di sini. Pada kenyataan nya, routing request tidak sesederhana ini karena kita perlu memfilter http method yang digunakan pada sebuah request yang diterima. Artikel ini hanya memperkenalkan bagaimana cara nya sebuah request dirouting secara spesifik, untuk materi lebih lanjut insya Allah akan kita bahas di artikel-artikel lain nya.

Semoga bermanfaat.

Tinggalkan Balasan

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