Custom Decorators
Penjelasan
Custom parameter decorator dibuat lewat createParamDecorator() — dipakai untuk mengekstrak logika pengambilan data yang berulang (mis. mengambil user yang sedang login dari request) jadi satu decorator yang bisa dipakai ulang di banyak handler, tanpa menulis ulang req.user setiap kali.
Contoh Konsep
import { createParamDecorator, ExecutionContext } from '@nestjs/common';
export const UserSaatIni = createParamDecorator(
(data: unknown, ctx: ExecutionContext) => {
const request = ctx.switchToHttp().getRequest();
return request.user; // anggap sudah diisi middleware/guard autentikasi sebelumnya
},
);
// Dipakai di controller:
@Get('profil')
getProfil(@UserSaatIni() user: any) {
return user;
}
Praktikum
Buat custom decorator IpClient yang mengekstrak request.ip dari request lewat createParamDecorator(). Tulis contoh method controller yang memakainya untuk mencatat IP pengunjung.
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
Custom decorator seperti @UserSaatIni() hanya BOLEH dipakai sebagai PARAMETER method handler (persis seperti @Body()/@Param() bawaan) — tidak bisa dipakai sembarangan di tempat lain, karena createParamDecorator() memang dirancang khusus untuk konteks ekstraksi parameter request.