Hari 10: Router dan Controller

30 Hari Javascript

·

3 min read

Hari 10: Router dan Controller

Router

Router adalah arah jalannya program, sehingga ketika ada request misal /login maka router akan mengarahkan server menjalankan controller melalui /login sehingga mendapatkan response.

Sebelumnya kita telah menggunakannya pada file index.js tetapi Bagaimana jika kita memiliki route yang sangat banyak misal 3000 route?. Maka kita perlu organisir rute kita agar lebih rapi dan mudah untuk dimaintenance.

Buatlah folder baru pada proyek kita dengan nama routes dan isinya file router.js. Pindahkan kode dari file index.js yang mengandung rute ke file router.js dan tambahkan kode untuk method .Router() sehingga seperti berikut.

https://raw.githubusercontent.com/AsrulLove/img-db/master/folder-proyek.png

File router.js

const router = require("express").Router();

router.get("/", function (request, response) {
  response.send("Webserver asrul.dev");
});

router.get("/cari-jodoh", function (request, response) {
  response.send("Cari jodoh dengan http " + request.method);
});

router.post("/cari-jodoh", function (request, response) {
  response.send("Cari jodoh dengan http " + request.method);
});

router.put("/cari-jodoh", function (request, response) {
  response.send("Cari jodoh dengan http " + request.method);
});

router.delete("/cari-jodoh", function (request, response) {
  response.send("Cari jodoh dengan http " + request.method);
});

router.get("/about", (req, res) => {
  res.send(
    "ini rute /about " + req.query.nama + " dan umurnya " + req.query.umur
  );
});

router.get("/profile", (req, res) => {
  res.redirect("/login");
});

router.get("/login", (req, res) => {
  res.send("silahkan Login terlebih dahulu");
});

module.exports = router;

Modifikasi file index.js menjadi seperti berikut.

const express = require("express");
const app = express();
const router = require("./routes/router.js");

app.use("/", router);

app.listen(5000, function () {
  console.log(`Server running on http://localhost:5000`);
});

module.exports = app;

Jika dilakukan ujicoba pada endpoint pada materi request dan response tidak ada perubahan, saya ucapkan selamat. :) Anda berhasil memisahkan file server dan router.

Untuk pengelompokan rute lebih spesifik lagi seperti 1 file user.router.js hanya mengelola rute user saja, bisa Anda lakukan dengan hal yang sama. Mungkin ini akan menjadi salah satu challenge minggu depan.

Controller

Controller adalah proses melakukan kontrol atau logika dan komputasi pada sebuah aplikasi sebelum dikirimkan ke user sebagai response. Disini kontrol masih bergabung dengan router. Mari kita buat sebuah folder dengan nama controller dan buat sebuah file dengan nama jodoh.controller.js sehingga hasilnya seperti berikut.

File jodoh.controller.js

function getJodoh(request, response) {
  response.send("Cari jodoh dengan http " + request.method);
}

function setJodoh(request, response) {
  response.send("Cari jodoh dengan http " + request.method);
}

function updateJodoh(request, response) {
  response.send("Cari jodoh dengan http " + request.method);
}

function deleteJodoh(request, response) {
  response.send("Cari jodoh dengan http " + request.method);
}

module.exports = {
  getJodoh,
  setJodoh,
  updateJodoh,
  deleteJodoh,
};

Modifikasi file router.js menjadi seperti berikut.

const router = require("express").Router();
const jodoh = require("../controller/jodoh.controller.js");

router.get("/", function (request, response) {
  response.send("Webserver asrul.dev");
});

router.get("/cari-jodoh", jodoh.getJodoh);

router.post("/cari-jodoh", jodoh.setJodoh);

router.put("/cari-jodoh", jodoh.updateJodoh);

router.delete("/cari-jodoh", jodoh.deleteJodoh);

router.get("/about", (req, res) => {
  res.send(
    "ini rute /about " + req.query.nama + " dan umurnya " + req.query.umur
  );
});

router.get("/profile", (req, res) => {
  res.redirect("/login");
});

router.get("/login", (req, res) => {
  res.send("silahkan Login terlebih dahulu");
});

module.exports = router;

Jika hasilnya tidak berubah dari yang sebelumnya, saya ucapkan sekali lagi selamat Anda berhasil. :)