Я новичок в Angular, и я только что построил перехватчик. Согласно нескольким учебникам, вы должны включить HTTP_INTERCEPTORS
в app.module
следующим образом:
providers: [{ provide: HTTP_INTERCEPTORS, useClass: MyInterceptor, multi: true }]
Мне было интересно, что означает / делает этот атрибут multi: true
и можно ли его опустить или нет.
Я прочитал руководство angular.io об этом атрибуте. Они объясняют это следующим образом:
Я не понимаю эту часть:
Обратите внимание на параметр multi: true. Эта обязательная настройка сообщает Angular, что
HTTP_INTERCEPTORS - это токен для мультипровайдера, который внедряет массив
значений, а не одно значение.
Это проливает некоторый свет на концепцию, но я пока не совсем понимаю, когда перехватчик вводит несколько значений, а когда нет. Например, мой собственный перехватчик только меняет заголовки. Означает ли это, что оно вводит только одно значение?
Спасибо
EDIT:
Это мой перехватчик
import { Injectable } from '@angular/core';
import { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor, HttpHeaders } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
import { LoginService } from '../Services/login.service';
@Injectable()
export class JwtInterceptor implements HttpInterceptor {
constructor(private loginService:LoginService){}
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
// add authorization header with jwt token if available
console.log("ik zit nu in de interceptor");
let currentUser = this.loginService.getToken();
if (currentUser !=="") {
request = request.clone({
headers: new HttpHeaders({
'Content-Type': 'application/json',
'Authorization': `Bearer ${currentUser}`
})
});
}
return next.handle(request);
}
}
Это список приложений app.module
providers: [
{ provide: APP_BASE_HREF, useValue: '/' },
{ provide: HTTP_INTERCEPTORS, useClass: JwtInterceptor, multi: true },
{ provide: 'AUTH_URL', useValue: 'http://localhost:8080/auth' },
{ provide: 'API_URL', useValue: 'http://localhost:8080/api' },
{ provide: 'HEADERS', useValue: new HttpHeaders({'Content-Type': 'application/json'}) },
LoginGuard,
LoginService,
UserService,
MessageService
],