Menu
CoddyTech

Interceptor

Fa parte della sezione TypeScript e NestJS del percorso Node.js di Coddy. Lezione 16 di 17.

Vuoi che ogni risposta indichi quanto tempo ci è voluto, senza dover modificare ogni handler. Un interceptor avvolge l'handler: il codice prima di next.handle() viene eseguito prima, mentre il codice sul valore restituito da next.handle() viene eseguito dopo.

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

next.handle() fornisce il risultato dell'handler come osservabile RxJS, un valore che arriva in seguito. pipe(tap(...)) esegue una funzione quando il valore arriva, prima che Nest lo invii. Restituisci l'osservabile con la pipeline: Nest invia ciò che contiene. context.switchToHttp().getResponse() fornisce res, il cui metodo setHeader aggiunge un'intestazione.

app.useGlobalInterceptors(...) applica un interceptor a ogni route; @UseInterceptors(...) a un solo controller.

challenge icon

Sfida

Facile
  • Completa ResponseTimeInterceptor: ogni risposta include X-Response-Time, il tempo in millisecondi impiegato dal gestore, come 3ms.
  • Registralo per l'intera app.
  • Invia GET /tasks e GET /stats e apri la scheda Headers, quindi invia POST /tasks senza una chiave.

Provalo tu

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> {
        // Registra l'ora, lascia eseguire l'handler, poi imposta X-Response-Time.
        return next.handle();
    }
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di TypeScript e NestJS