我是Angular的新手,我刚刚构建了一个拦截器。根据多个教程,您必须像这样在HTTP_INTERCEPTORS
中包括app.module
:
providers: [{ provide: HTTP_INTERCEPTORS, useClass: MyInterceptor, multi: true }]
我想知道
multi: true
属性的含义/作用以及是否可以忽略它。我已经阅读了有关此属性的angular.io指南。他们解释如下:
我不明白这部分内容:
这为这个概念提供了一些启示,但是我还不太了解拦截器何时注入(inject)多个值,何时不注入(inject)多个值。例如,我自己的拦截器仅更改 header 。这是否意味着它只注入(inject)一个值?
这是我的拦截器
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
],
最佳答案
从ValueProvider接口(interface)的描述中,我们可以了解multi
属性:
这意味着对于 token ,我们提供一个值,将使用多个值(或类)。
例如,请参见this example(这是一个示例项目),其中为 token HTTP_INTERCEPTORS
指定了它,以使用类(useClass
)ErrorInterceptor
和SecurityInterceptor
。为了使它起作用,我们需要指定multi: true
,以便Angular知道将使用多个值(或类)。
{
provide: HTTP_INTERCEPTORS,
useClass: ErrorInterceptor,
multi: true
},
{
provide: HTTP_INTERCEPTORS,
useClass: SecurityInterceptor,
multi: true
},
这里的关键点是
HTTP_INTERCEPTORS
是多提供商 token 。这意味着,当为此 token 提供新的值或类时,属性multi
是必需的,并且必须将其设置为true
。请参阅HttpClient文档,其中描述了如何provide an interceptor说明的部分:
关于angular - multi : true attribute of HTTP_INTERCEPTORS mean?是什么,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51141132/