ตัวสกัดกั้นแบบฟังก์ชัน
สกัดกั้นคำขอด้วยตัวสกัดกั้นแบบฟังก์ชัน
ตัวสกัดกั้นแบบฟังก์ชัน เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ตัวสกัดกั้นแบบฟังก์ชัน
- การเพิ่มส่วนหัวการยืนยันตัวตน
- การจัดการข้อผิดพลาดทั่วทั้งแอป
- การลองใหม่และตัวบ่งชี้การโหลด