Funktionelle interceptorer
Interceptér forespørgsler med funktionelle interceptorer.
Funktionelle interceptorer er en gratis Angular Academy-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Angular Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Angular Academy-kurset indeholder 4 lektioner i alt.
Hvad er en interceptor
En HTTP-interceptor befinder sig mellem din app og netværket. Alle forespørgsler og svar passerer gennem den, så du kan tilføje headere, logge, transformere, gentage eller håndtere fejl ét centralt sted.
HttpInterceptorFn
Moderne Angular bruger funktionelle interceptors: En HttpInterceptorFn modtager forespørgslen og en next-handler og returnerer en observable med HTTP-hændelser.
import { HttpInterceptorFn } from '@angular/common/http';
export const loggingInterceptor: HttpInterceptorFn = (req, next) => {
console.log('request to', req.url);
return next(req);
};Registrering med withInterceptors
Angiv interceptors via provideHttpClient(withInterceptors([...])) i appens konfiguration.
import { provideHttpClient, withInterceptors } from '@angular/common/http';
export const appConfig = {
providers: [
provideHttpClient(withInterceptors([loggingInterceptor]))
]
};Den næste handler
Kald next(req) for at sende forespørgslen videre gennem kæden. Det, du returnerer, bliver forespørgselsforløbet; hvis du ikke kalder next, bliver forespørgslen aldrig sendt.
Forespørgsler kan ikke ændres
HttpRequest kan ikke ændres. Hvis du vil ændre den, skal du bruge clone() med dine ændringer og sende klonen til next.
export const interceptor: HttpInterceptorFn = (req, next) => {
const cloned = req.clone({ setHeaders: { 'X-App': 'demo' } });
return next(cloned);
};Kædning af flere interceptors
Interceptors kører i den rækkefølge, de er angivet i. Hver interceptor omslutter den næste, så arrayet danner en pipeline: Den første ser forespørgslen først og svaret sidst.
withInterceptors([authInterceptor, loggingInterceptor, errorInterceptor])
// auth runs first on the way outBrug af inject() i interceptors
Funktionelle interceptors kører i en injection-kontekst, så du kan bruge inject() direkte til services.
import { inject } from '@angular/core';
export const authInterceptor: HttpInterceptorFn = (req, next) => {
const token = inject(AuthService).token();
return next(req); // use token to modify req
};Undersøgelse af svaret
Brug tap på den returnerede strøm for at observere svar, f.eks. til tidsmåling eller logning.
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'))
);
};Betinget interception
Du kan forgrene ud fra forespørgslens URL eller metode for kun at anvende logik i bestemte tilfælde.
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);
};Funktionelle og klassebaserede interceptors
Funktionelle interceptors erstatter den ældre klassebaserede HttpInterceptor. De er enklere, kan tree-shakes, er nemme at afprøve og registreres uden DI-tokens.
Samarbejde med DI-baserede interceptors
Hvis du er nødt til at bruge ældre klassebaserede interceptors, forbinder withInterceptorsFromDi() dem. Foretræk funktionelle interceptors i ny kode.
provideHttpClient(
withInterceptors([authInterceptor]),
withInterceptorsFromDi()
)Hurtig kontrol
Afprøv din forståelse af funktionelle interceptors.
Opsummering: Funktionelle interceptors
Interceptors samler tværgående HTTP-logik ét sted.
HttpInterceptorFn: (req, next) => Observable.- Registrér med
withInterceptors([...]). - Klon forespørgsler for at ændre dem, og kald
nextfor at fortsætte. - Brug
inject()til services.
Næste: tilføjelse af auth-headere.
Lær HTML med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 38
- Lektioner
- 144
Ofte stillede spørgsmål
Er lektionen “Funktionelle interceptorer” gratis?
Ja — alle 3 lektioner i læringssporet Angular Academy, inklusive “Funktionelle interceptorer”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Angular Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Funktionelle interceptorer”?
Interceptér forespørgsler med funktionelle interceptorer. Du øver dig i Angular Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Angular Academy?
Der kræves ingen tidligere erfaring. Angular Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.
Hvor lang tid tager lektionen “Funktionelle interceptorer”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Angular Academy-lektion?
Ja. Alle Angular Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Funktionelle interceptorer
- Tilføjelse af auth-headere
- Global fejlhåndtering
- Genforsøg og indlæsningsindikatorer