Я создал HttpInterceptor
, который отлично работает для модуля App, однако он не вызывается для избранных модулей, которые являются ленивыми модулями.Мне интересно, почему это не работает.
- Я предоставил
HttpInterceptor
в app.module.ts
. - Я использую Angular 7
HttpClient
используется не Http
.
Пожалуйста, дайте мне знать, если вам нужны другие детали.
AppModule
@NgModule({
declarations: [AppComponent],
imports: [
BrowserModule,
BrowserAnimationsModule,
HttpClientModule,
AppRoutingModule,
NgbModule.forRoot(),
ThemeModule.forRoot(),
CoreModule.forRoot(),
],
bootstrap: [AppComponent],
providers: [
{provide: APP_BASE_HREF, useValue: '/'},
AuthGuard,
{
provide: NbRoleProvider,
useClass: RoleProvider,
},
ZtLoaderService
],
})
export class AppModule {
}
CoreModule
export class CoreModule {
constructor(@Optional() @SkipSelf() parentModule: CoreModule) {
throwIfAlreadyLoaded(parentModule, 'CoreModule');
}
static forRoot(): ModuleWithProviders {
return <ModuleWithProviders> {
ngModule: CoreModule,
providers: [
...NB_CORE_PROVIDERS,
httpInterceptorProviders
],
};
}
}
httpInterceptorProviders
export const httpInterceptorProviders = [
{provide: HTTP_INTERCEPTORS, useClass: AuthInterceptor, multi: true},
{provide: HTTP_INTERCEPTORS, useClass: ErrorInterceptor, multi: true}
];
AuthInterceptor
@Injectable()
export class AuthInterceptor implements HttpInterceptor {
constructor(private injector: Injector) {
}
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
// do not intercept request whose urls are filtered by the injected filter
console.log("intercept.........................");
this.authService.isAuthenticatedOrRefresh().subscribe(response=>{
console.log("authenticated ----------->", response);
})
return this.authService.isAuthenticatedOrRefresh()
.pipe(
switchMap(authenticated => {
if (authenticated) {
return this.authService.getToken().pipe(
switchMap((token: any) => {
const JWT = `Bearer ${token.getValue()}`;
req = req.clone({
setHeaders: {
Authorization: JWT,
},
});
return next.handle(req);
}),
)
} else {
// Request is sent to server without authentication so that the client code
// receives the 401/403 error and can act as desired ('session expired', redirect to login, aso)
return next.handle(req);
}
}),
)
}
protected get authService(): NbAuthService {
return this.injector.get(NbAuthService);
}
}
Ленивый модуль: BPOEntryModule
@NgModule({
imports: [
ThemeModule,
BPORoutingModule,
Ng2SmartTableModule
],
declarations: [
...routedComponents,
BlListEntry,
EntryListSearchResultComponent,
EntryListSearchComponent,
ModalComponent,
ResultItemComponent,
ResultToolbarComponent
],
entryComponents: [ModalComponent],
providers: [BPOEntryService]
})
export class BPOEntryModule {}