Menu
CoddyTech

מיירטים

חלק מהיחידה TypeScript ו-NestJS במסלול ה-Node.js של Coddy. שיעור 16 מתוך 17.

אתה רוצה שכל תשובה תציין כמה זמן היא ארכה, בלי לגעת בכל handler. מיירט עוטף את ה-handler: קוד שלפני next.handle() רץ לפניו, וקוד על מה ש-next.handle() מחזירה רץ אחריו.

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

next.handle() מספקת את תוצאת ה-handler כ-observable של RxJS, ערך שמגיע מאוחר יותר. pipe(tap(...)) מריצה פונקציה כשהערך מגיע, לפני ש-Nest שולחת אותו. החזר את ה-observable שעבר צינור: Nest שולחת את מה שהוא מכיל. context.switchToHttp().getResponse() מספקת את res, שה-setHeader שלה מוסיף כותרת.

app.useGlobalInterceptors(...) מחילה מיירט על כל נתיב; @UseInterceptors(...) על בקר יחיד.

challenge icon

אתגר

קל
  • השלימו את ResponseTimeInterceptor: כל תשובה כוללת X-Response-Time, את משך הזמן באלפיות השנייה שלקח למטפל, כמו 3ms.
  • רשמו אותו עבור האפליקציה כולה.
  • שלחו GET /tasks ואת GET /stats ופתחו את לשונית Headers, ואז שלחו POST /tasks ללא מפתח.

נסו בעצמכם

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> {
        // רשמו את השעה, אפשרו ל-handler לפעול, ואז הגדירו את X-Response-Time.
        return next.handle();
    }
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה TypeScript ו-NestJS