Angular API&x27;s在使用截取器时调用两次
我使用两个拦截器拦截每个请求。一个用于添加令牌,另一个用于在API调用无法与后端通信时显示错误 令牌拦截器Angular API&x27;s在使用截取器时调用两次,angular,Angular,我使用两个拦截器拦截每个请求。一个用于添加令牌,另一个用于在API调用无法与后端通信时显示错误 令牌拦截器 @Injectable() export class TokenInterceptor implements HttpInterceptor{ authService?: AuthService; constructor ( private inj: Injector,public errorHandler: ErrorHandler, ) {} intercept(req:
@Injectable()
export class TokenInterceptor implements HttpInterceptor{
authService?: AuthService;
constructor ( private inj: Injector,public errorHandler: ErrorHandler, ) {}
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return this.authService
.retrieveToken((req.url))
.mergeMap((token: string) => {
if (token !== null) {
const request = req.clone({setHeaders: {Authorization: `Bearer ${ token }`}});
return next.handle(request);
}
return next.handle(req);
});
}
@Injectable()
export class RequestInterceptor implements HttpInterceptor {
constructor(
public errorHandler: ErrorHandler,
) {}
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(request).do((event: HttpEvent<any>) => {
console.log(request);//It's displaying twice
}, (err: any) => {
if (err instanceof HttpErrorResponse) {
this.errorHandler.handleError(err);
}
});
}
}
当我在ErrorInterceptor中控制台请求时,我无法找出请求调用两次的原因。怎么才能不叫它两次呢 您如何检索令牌?i、 e.“Retrevetoken”是否发出web请求?是的,它正在与Azure对话以获取令牌。但是,即使我删除了令牌拦截器文件,API仍然会在错误中调用两次拦截器,或者您可以共享您的模块文件-您在其中注册拦截器,或者您已经更新了问题
@NgModule({
imports: [
HttpClientModule
],
exports: [
HttpClientModule
],
declarations: [],
providers: [
DataService,
ErrorHandler,
{
provide: HTTP_INTERCEPTORS,
useClass: TokenInterceptor,
multi: true
},
{
provide: HTTP_INTERCEPTORS,
useClass: RequestInterceptor,
multi: true,
},
AuthService,
AdalService,
]
})
export class ServicesModule { }