Interseptor
Termasuk bagian TypeScript dan NestJS dalam perjalanan Node.js di Coddy. Pelajaran 16 dari 17.
Kamu ingin setiap jawaban menyebutkan berapa lama waktu yang dibutuhkan, tanpa mengubah setiap handler. interceptor membungkus handler: kode sebelum next.handle() berjalan sebelumnya, dan kode pada nilai yang dikembalikan next.handle() berjalan sesudahnya.
intercept(context: ExecutionContext, next: CallHandler) {
console.log('before');
return next.handle().pipe(
tap(() => console.log('after')),
);
}next.handle() memberikan hasil handler sebagai observable RxJS, yaitu nilai yang tiba kemudian. pipe(tap(...)) menjalankan fungsi saat nilai itu tiba, sebelum Nest mengirimkannya. Kembalikan observable yang telah di-pipe: Nest mengirimkan nilai yang dibawanya. context.switchToHttp().getResponse() memberikan res, yang setHeader-nya menambahkan header.
app.useGlobalInterceptors(...) menerapkan interceptor ke setiap route; @UseInterceptors(...) menerapkannya ke satu controller.
Tantangan
Mudah- Selesaikan
ResponseTimeInterceptor: setiap respons menyertakanX-Response-Time, yaitu waktu dalam milidetik yang dibutuhkan handler, seperti3ms. - Daftarkan untuk seluruh aplikasi.
- Kirim
GET /tasksdanGET /stats, lalu buka tab Headers. Setelah itu, kirimPOST /taskstanpa kunci.
Coba sendiri
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> {
// Catat waktunya, biarkan handler berjalan, lalu atur X-Response-Time.
return next.handle();
}
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di TypeScript dan NestJS
Latihan sendiri: Playground Express