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.
Sfida
Facile- Completa
ResponseTimeInterceptor: ogni risposta includeX-Response-Time, il tempo in millisecondi impiegato dal gestore, come3ms. - Registralo per l'intera app.
- Invia
GET /taskseGET /statse apri la scheda Headers, quindi inviaPOST /taskssenza 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();
}
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.