Study
NestJS

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.

Editor Latihan

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.