Что такое Angular interceptor(перехватчик)?
Angular interceptor (перехватчик) - это механизм в Angular, который позволяет перехватывать и обрабатывать HTTP-запросы и ответы перед их отправкой или после получения. Интерсепторы в Angular могут быть использованы для различных целей, таких как добавление заголовков, обработка ошибок, авторизация, кэширование и т.д. Они представляют собой классы, реализующие интерфейс HttpInterceptor
. Давайте разберемся с этим шаг за шагом:
Шаг 1: Создание интерсептора
- Создайте новый класс, который будет служить интерсептором. Он должен реализовывать интерфейс
HttpInterceptor
. - Пример кода:
import { Injectable } from '@angular/core'
import { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor } from '@angular/common/http'
import { Observable } from 'rxjs'
@Injectable()
export class MyInterceptor implements HttpInterceptor {
constructor() {}
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
// Добавьте свою логику перехвата и обработки запросов и ответов здесь
return next.handle(request)
}
}
Шаг 2: Регистрация интерсептора
- Чтобы Angular использовал ваш интерсептор, вы должны зарегистрировать его в провайдере в вашем модуле приложения или в корневом модуле.
- Пример кода:
import { NgModule } from '@angular/core'
import { HTTP_INTERCEPTORS } from '@angular/common/http'
import { MyInterceptor } from './my-interceptor'
@NgModule({
providers: [
{
provide: HTTP_INTERCEPTORS,
useClass: MyInterceptor,
multi: true
}
]
})
export class AppModule {}
Шаг 3: Добавление логики в интерсептор
- В методе
intercept
интерсептора вы можете добавить логику перехвата и обработки запросов и ответов. - Например, вы можете добавить заголовки к запросу или обрабатывать ошибки.
- Пример кода:
import { Injectable } from '@angular/core'
import { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor } from '@angular/common/http'
import { Observable } from 'rxjs'
@Injectable()
export class MyInterceptor implements HttpInterceptor {
constructor() {}
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
// Добавление заголовков к запросу
const modifiedRequest = request.clone({
setHeaders: {
Authorization: 'Bearer token'
}
})
// Обработка ошибок
return next.handle(modifiedRequest).pipe(
catchError((error) => {
// Обработка ошибок здесь
return throwError(error)
})
)
}
}
Интерсепторы в Angular предоставляют мощный инструмент для перехвата и обработки HTTP-запросов и ответов. Они позволяют вам добавлять общую функциональность на уровне приложения и избегать дублирования кода в разных компонентах и сервисах.