Menggunakan Middleware

Menggunakan middleware

Middleware pada Express adalah fungsi yang memiliki akses ke object request (req), response (res), dan next. Middleware berada di tengah-tengah jalur request dan response, dan berfungsi untuk memodifikasi request dan response.

Middleware dapat digunakan untuk berbagai hal, seperti:

  • Parsing data
  • Manipulasi request dan response
  • Autentikasi dan otorisasi
  • Error handling

Middleware built-in dari Express

Express memiliki beberapa middleware built-in yang dapat digunakan untuk berbagai keperluan. Berikut adalah beberapa middleware built-in yang sering digunakan:

  • express.json() - untuk meng-handle request dengan header Content-Type: application/json
  • express.urlencoded() - untuk meng-handle request dengan header Content-Type: application/x-www-form-urlencoded
  • express.static() - untuk meng-handle request asset seperti gambar, CSS, dan JavaScript
  • express.Router() - untuk membuat router baru di aplikasi Express

Membuat middleware sendiri

Middleware sendiri dapat dibuat dengan menggunakan fungsi yang memiliki parameter req, res, dan next. Berikut adalah contoh middleware yang dapat digunakan untuk menampilkan pesan di console setiap kali ada request:

const logger = (req, res, next) => {
  console.log('Ada request ke ' + req.url);
  next();
}

Middleware di atas dapat digunakan dengan cara seperti ini:

index.js
const app = require('express')();
const PORT = 3000;
 
app.use(logger);
 
app.get('/', (req, res) => {
  res.send('Hello World!');
});
 
app.listen(PORT, () => {
  console.log(`Server berjalan di port ${PORT}`);
});

Apabila kita jalankan kode di atas, maka setiap ada request ke aplikasi, akan muncul pesan di console seperti ini:

Ada request ke /

Menggunakan middleware di route tertentu

Middleware juga dapat digunakan dengan path atau rute tertentu saja. Berikut adalah contoh penggunaan middleware dengan path tertentu:

const app = require('express')();
const PORT = 3000;
const logger = (req, res, next) => {
  console.log('Ada request ke ' + req.url);
  next();
}
 
app.use('/admin', logger);
 
app.get('/', (req, res) => {
  res.send('Hello World!');
});
 
app.get('/admin', (req, res) => {
  res.send('Hello Admin!');
});
 
app.listen(PORT, () => {
  console.log(`Server berjalan di port ${PORT}`);
});

Apabila kita jalankan kode di atas, maka setiap ada request ke path /admin, akan muncul pesan di console seperti ini:

Ada request ke /admin

Membuat middleware untuk transform response

Middleware juga dapat digunakan untuk mengubah response yang akan dikirimkan ke client. Agar lebih memudahkan bagi FrontEnd developer juga dalam pembacaan data dan membuat response yang konsisten dalam format tertentu, kita dapat membuat middleware untuk mengubah response yang dikirimkan oleh server.

Untuk kali ini kita akan mengikuti API Standard yang dibuat oleh jsonapi (opens in a new tab) namun untuk awal belajar saat ini kita hanya akan mengirimkan dalam bentuk yang sederhana saja.

Berikut adalah contoh middleware untuk mengubah response menjadi format JSON:

const app = require('express')();
const PORT = 3000;
 
const transformResponse = (req, res, next) => {
  const oldSend = res.send;
 
  res.send = (data) => {
    const responseData = {
      status: 'success',
      data: data,
    };
 
    oldSend.apply(res, [responseData]);
  };
 
  next();
};
 
// untuk mengaktifkan middleware yang telah dibuat barusan secara global
app.use(transformResponse);
 
app.get('/users', (req, res) => {
  res.send('Users');
});
 
app.listen(PORT, () => {
  console.log(`Server berjalan di port ${PORT}`);
});