Middleware di NestJS
Penjelasan
Middleware NestJS mirip konsepnya dengan Express (karena NestJS memang dibangun di atasnya) — class mengimplementasikan NestMiddleware dengan method use(req, res, next). Didaftarkan lewat method configure() di dalam @Module yang mengimplementasikan NestModule, bukan app.use() global seperti Express murni.
Contoh Konsep
// logger.middleware.ts
import { Injectable, NestMiddleware } from '@nestjs/common';
import { Request, Response, NextFunction } from 'express';
@Injectable()
export class LoggerMiddleware implements NestMiddleware {
use(req: Request, res: Response, next: NextFunction) {
console.log(`${req.method} ${req.url}`);
next();
}
}
// app.module.ts
import { Module, NestModule, MiddlewareConsumer } from '@nestjs/common';
@Module({})
export class AppModule implements NestModule {
configure(consumer: MiddlewareConsumer) {
consumer.apply(LoggerMiddleware).forRoutes('*'); // berlaku untuk semua route
}
}
Praktikum
Buat CekJamKerjaMiddleware yang menolak akses (status 403) kalau jam sekarang (new Date().getHours()) di luar rentang 8-17 di method use(). Tulis contoh configure() yang menerapkannya cuma untuk route 'admin'.
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
forRoutes('*') menerapkan middleware ke SEMUA route, sedangkan forRoutes('produk') hanya ke route berprefix /produk — kamu juga bisa forRoutes({ path: 'produk', method: RequestMethod.GET }) untuk membatasi ke HTTP method tertentu saja.