Menu
CoddyTech

Interceptor'lar

Coddy'nin Node.js Journey'sinin TypeScript ve NestJS bölümünün bir parçası. Ders 16 / 17.

Her yanıtın, her işleyiciye dokunmadan ne kadar sürdüğünü söylemesini istiyorsun. Bir araya girici, işleyiciyi sarar: next.handle() öncesindeki kod ondan önce çalışır, next.handle() çağrısının döndürdüğü değer üzerindeki kod ise ondan sonra çalışır.

intercept(context: ExecutionContext, next: CallHandler) {
    console.log('before');
    return next.handle().pipe(
        tap(() => console.log('after')),
    );
}

next.handle(), işleyicinin sonucunu RxJS gözlemlenebilir değeri olarak verir; bu, daha sonra gelen bir değerdir. pipe(tap(...)), değer geldiğinde Nest onu göndermeden önce bir işlev çalıştırır. Boru hattına alınmış gözlemlenebilir değeri döndür: Nest onun taşıdığı değeri gönderir. context.switchToHttp().getResponse(), res değerini verir; bu değerin setHeader yöntemi bir başlık ekler.

app.useGlobalInterceptors(...) bir araya giriciyi her rotaya uygular; @UseInterceptors(...) ise tek bir denetleyiciye uygular.

challenge icon

Görev

Kolay
  • ResponseTimeInterceptor'ı tamamla: her yanıt, işleyicinin ne kadar sürdüğünü milisaniye cinsinden gösteren X-Response-Time başlığını, örneğin 3ms değerini içerir.
  • Bunu tüm uygulama için kaydet.
  • GET /tasks ve GET /stats isteklerini gönderip Headers sekmesini aç, ardından anahtar olmadan POST /tasks isteğini gönder.

Kendin dene

import { CallHandler, ExecutionContext, Injectable, NestInterceptor } from '@nestjs/common';
import { Observable, tap } from 'rxjs';

@Injectable()
export class ResponseTimeInterceptor implements NestInterceptor {
    intercept(context: ExecutionContext, next: CallHandler): Observable<unknown> {
        // Zamanı kaydedin, handler'ın çalışmasına izin verin, ardından X-Response-Time değerini ayarlayın.
        return next.handle();
    }
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

TypeScript ve NestJS bölümündeki tüm dersler