Interceptors
Penjelasan
Interceptor membungkus eksekusi handler dari LUAR — bisa menjalankan kode SEBELUM DAN SESUDAH handler dieksekusi (beda dengan Guard yang cuma sebelum), memakai RxJS Observable untuk memanipulasi response. Umum dipakai untuk logging durasi eksekusi, transform format response secara seragam, atau caching.
Contoh Konsep
import { Injectable, NestInterceptor, ExecutionContext, CallHandler } from '@nestjs/common';
import { Observable } from 'rxjs';
import { tap } from 'rxjs/operators';
@Injectable()
export class LoggingInterceptor implements NestInterceptor {
intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
const mulai = Date.now();
return next.handle().pipe(
tap(() => console.log(`Request selesai dalam ${Date.now() - mulai}ms`))
);
}
}
// Dipakai: @UseInterceptors(LoggingInterceptor) di atas Controller/method
Praktikum
Buat TransformResponseInterceptor yang membungkus SEMUA response jadi format { success: true, data: hasilAsli } lewat operator map() dari rxjs/operators.
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
Interceptor bekerja dengan RxJS Observable (bukan Promise biasa) karena berperan membungkus STREAM response — kalau belum familiar RxJS, cukup ingat pola dasarnya: next.handle() adalah eksekusi handler asli, .pipe(operator(...)) memodifikasi hasilnya sebelum benar-benar dikirim ke client.