Я использую Angular 8. Я звоню бэкэнду, ответом которого является файл PDF. Я использую ngx-restangular
версию 5. При звонке в бэкэнд от почтальона я получил ожидаемый ответ. Но вызов backend из angular приводит к следующей ошибке в консоли:
{
headers: {...},
status: 200,
statusText: "OK",
url: "...",
ok: false,
name: "HttpResponseError",
message: "Http failure during parsing for http://{url}",
error: {...},
request: {...},
data:{...}
}
Я попытался добавить responseType: 'blob'
в заголовок, как предложено в некоторых решениях. Но это тоже не работает. Ниже приведен код.
класс обслуживания:
...
download(id: number): Observable<any> {
return this.restAngular
.one('/download/' + id)
.customGET('', {}, {responseType: 'blob'});
}
...
класс компонента:
printFile(id: number) {
this._service.download(id).subscribe(
res => {
FileSaver.saveAs(res, 'form.pdf');
}, err => {
console.log(err);
}
);
}
и пользовательский перехватчик выглядит следующим образом:
@Injectable({providedIn: 'root'})
export class CustomHttpInterceptor implements HttpInterceptor {
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
const accessToken = localStorage.getItem('accessToken');
if (accessToken) {
request = request.clone({
headers: new HttpHeaders({
'Content-Type': 'application/json',
'Authorization': accessToken,
'Accept': 'application/json'
})
});
return next.handle(request);
} else {
request = request.clone({
headers: new HttpHeaders({
'Content-Type': 'application/json',
'Accept': 'application/json'
})
});
return next.handle(request);
}
}
}
app.module.ts
:
...
export function restangularConfigFactory(RestangularProvider) {
RestangularProvider.setBaseUrl(environment.baseUrl);
RestangularProvider.setDefaultHeaders({Authorization: sessionStorage.getItem('accessToken')});
}
@NgModule({
declarations: [
...
],
imports: [
BrowserModule,
AppRoutingModule,
EntityModule,
RestangularModule.forRoot(restangularConfigFactory),
ReactiveFormsModule,
...
],
bootstrap: [AppComponent],
providers: [{
provide: HTTP_INTERCEPTORS, useClass: CustomHttpInterceptor, multi: true
}],
schemas: [
CUSTOM_ELEMENTS_SCHEMA
]
})
export class AppModule {
}
ошибка выглядит так: