Ich habe ein Problem mit dem Angular Interceptor. Ich habe fetch
eine HTTP-Anfrage erhalten. Und ich möchte, dass ich den Fehler mit dem Interceptor fange, wenn es fehlschlägt. Aber als ich eine Get-Anfrage sende, hat mein Interceptor nicht funktioniert. Interceptor sieht diese Anfrage nicht. Wenn ich die Get-Anfrage bearbeite und HttpClient (this.http.get...) verwende - alles gut, alles funktioniert. Wie kann ich Requests fetch und interceptor verwenden?
@Injectable()
export class TestInterceptor implements HttpInterceptor {
constructor() {
console.log('constructor of interceptor');
}
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
console.log('interceptor work');
return next.handle(req);
}
}
@NgModule({
declarations: [
TestComponent
],
imports: [
SharedModule,
HttpClientModule
],
providers: [
{
provide: HTTP_INTERCEPTORS,
useClass: TestInterceptor,
multi: true
},
]
})
export class TestModule {}
sendRequest(url: string, method = 'GET', body = null): Promise<any> {
let response: Response;
return fetch(url, {
method,
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: body? JSON.stringify(body): null
});
}
Lösung des Problems
Kurz gesagt: Sie müssen verwenden HttpClient
, um Anfragen abzufangen, nur verwenden fetch()
wird nicht funktionieren. Obwohl dies nicht ausdrücklich in den Dokumenten angegeben ist, wird dies impliziert
- Die Hinweise zur HttpInterceptor-Nutzung erwähnen, dass das Abfangen an gebunden ist
HttpClientModule
(das nur einmal importiert und dann mit bezeichnet werden sollteHttpClient
) - Der HttpClient-Leitfaden, in dem erwähnt wird, dass „Entwickler diese Aufgaben ohne Abfangen explizit für jeden HttpClient-Methodenaufruf implementieren müssten".
Keine Kommentare:
Kommentar veröffentlichen