0Pricing
Angular Academy · บทเรียน

ตัวสกัดกั้นแบบฟังก์ชัน

สกัดกั้นคำขอด้วยตัวสกัดกั้นแบบฟังก์ชัน

ตัวสกัดกั้นแบบฟังก์ชัน เป็นบทเรียน Angular Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Angular Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Angular Academy มีบทเรียนทั้งหมด 4 บทเรียน

อินเตอร์เซปเตอร์คืออะไร

อินเตอร์เซปเตอร์ HTTP อยู่ระหว่างแอปของคุณกับเครือข่าย ทุกคำขอและการตอบกลับจะผ่านอินเตอร์เซปเตอร์นี้ คุณจึงสามารถเพิ่มส่วนหัว บันทึก แปลงข้อมูล ลองใหม่ หรือจัดการข้อผิดพลาดได้ใน จุดศูนย์กลางเดียว

HttpInterceptorFn

Angular สมัยใหม่ใช้อินเตอร์เซปเตอร์แบบฟังก์ชัน โดย HttpInterceptorFn จะรับคำขอและตัวจัดการ next แล้วคืนค่าออบเซอร์เวเบิลของเหตุการณ์ HTTP

import { HttpInterceptorFn } from '@angular/common/http';

export const loggingInterceptor: HttpInterceptorFn = (req, next) => {
  console.log('request to', req.url);
  return next(req);
};

การลงทะเบียนด้วย withInterceptors

จัดเตรียมอินเตอร์เซปเตอร์ผ่าน provideHttpClient(withInterceptors([...])) ในการกำหนดค่าแอป

import { provideHttpClient, withInterceptors } from '@angular/common/http';

export const appConfig = {
  providers: [
    provideHttpClient(withInterceptors([loggingInterceptor]))
  ]
};

ตัวจัดการ next

เรียก next(req) เพื่อส่งคำขอต่อไปตามสายโซ่ สิ่งที่คุณคืนค่าจะกลายเป็นลำดับการทำงานของคำขอ หากไม่เรียก next คำขอจะไม่ถูกส่ง

คำขอไม่สามารถเปลี่ยนแปลงได้

HttpRequest ไม่สามารถเปลี่ยนแปลงได้ หากต้องการแก้ไข คุณต้องใช้ clone() พร้อมการปรับเปลี่ยน แล้วส่งโคลนไปยัง next

export const interceptor: HttpInterceptorFn = (req, next) => {
  const cloned = req.clone({ setHeaders: { 'X-App': 'demo' } });
  return next(cloned);
};

การเชื่อมอินเตอร์เซปเตอร์หลายตัว

อินเตอร์เซปเตอร์จะทำงานตามลำดับที่ระบุ แต่ละตัวครอบตัวถัดไป ดังนั้นอาร์เรย์จึงเป็นสายการประมวลผล โดยตัวแรกเห็นคำขอก่อน และเห็นการตอบกลับเป็นตัวสุดท้าย

withInterceptors([authInterceptor, loggingInterceptor, errorInterceptor])
// auth runs first on the way out

การใช้ inject() ภายในอินเตอร์เซปเตอร์

อินเตอร์เซปเตอร์แบบฟังก์ชันทำงานในบริบทการฉีด คุณจึงสามารถใช้ inject() กับบริการต่าง ๆ ได้โดยตรง

import { inject } from '@angular/core';

export const authInterceptor: HttpInterceptorFn = (req, next) => {
  const token = inject(AuthService).token();
  return next(req); // use token to modify req
};

การตรวจสอบการตอบกลับ

แทรกการตรวจสอบในสตรีมที่คืนค่าเพื่อสังเกตการตอบกลับ เช่น ใช้จับเวลา หรือบันทึกข้อมูล

import { tap } from 'rxjs';

export const timingInterceptor: HttpInterceptorFn = (req, next) => {
  const start = Date.now();
  return next(req).pipe(
    tap(() => console.log(req.url, Date.now() - start, 'ms'))
  );
};

การดักจับแบบมีเงื่อนไข

คุณสามารถตรวจสอบ URL หรือเมธอดของคำขอเพื่อเลือกใช้ตรรกะตามเงื่อนไขได้

export const apiOnly: HttpInterceptorFn = (req, next) => {
  if (!req.url.startsWith('/api')) return next(req);
  const cloned = req.clone({ setHeaders: { 'X-Api': '1' } });
  return next(cloned);
};

อินเตอร์เซปเตอร์แบบฟังก์ชันเทียบกับแบบคลาส

อินเตอร์เซปเตอร์แบบฟังก์ชันมาแทน HttpInterceptor แบบคลาสรุ่นเก่า เรียบง่ายกว่า ตัดออกจากบันเดิลได้เมื่อไม่ใช้งาน ทดสอบได้ง่าย และลงทะเบียนได้โดยไม่ต้องใช้โทเค็น DI

การทำงานร่วมกับอินเตอร์เซปเตอร์แบบ DI

หากจำเป็นต้องใช้อินเตอร์เซปเตอร์แบบคลาสรุ่นเก่า withInterceptorsFromDi() จะช่วยเชื่อมให้ใช้งานร่วมกันได้ สำหรับโค้ดใหม่ ควรเลือกใช้แบบฟังก์ชัน

provideHttpClient(
  withInterceptors([authInterceptor]),
  withInterceptorsFromDi()
)

ตรวจสอบความเข้าใจอย่างรวดเร็ว

ทดสอบความเข้าใจเกี่ยวกับอินเตอร์เซปเตอร์แบบฟังก์ชันของคุณ

สรุป: อินเตอร์เซปเตอร์แบบฟังก์ชัน

อินเตอร์เซปเตอร์รวมตรรกะ HTTP ที่ใช้ร่วมกันทั่วทั้งแอปไว้ที่ศูนย์กลาง

  • HttpInterceptorFn: (req, next) => Observable
  • ลงทะเบียนด้วย withInterceptors([...])
  • โคลนคำขอเพื่อแก้ไข และเรียก next เพื่อทำงานต่อ
  • ใช้ inject() สำหรับบริการ

ถัดไป: การเพิ่มส่วนหัวการยืนยันตัวตน

คำถามที่พบบ่อย

บทเรียน “ตัวสกัดกั้นแบบฟังก์ชัน” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “ตัวสกัดกั้นแบบฟังก์ชัน” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Angular Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Angular Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ตัวสกัดกั้นแบบฟังก์ชัน”

สกัดกั้นคำขอด้วยตัวสกัดกั้นแบบฟังก์ชัน คุณปฏิบัติ Angular Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Angular Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Angular Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “ตัวสกัดกั้นแบบฟังก์ชัน” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Angular Academy นี้ได้ไหม

ได้ บทเรียน Angular Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ตัวสกัดกั้นแบบฟังก์ชัน
  2. การเพิ่มส่วนหัวการยืนยันตัวตน
  3. การจัดการข้อผิดพลาดทั่วทั้งแอป
  4. การลองใหม่และตัวบ่งชี้การโหลด
← กลับไปที่ Angular Academy