【发布时间】:2017-09-25 17:37:11
【问题描述】:
当我需要处理来自 pdf http 请求的错误时,我遇到了错误。 这是我生成pdf的服务方法(实名已更改):
generateSomePdf(obj: any): Observable<any> {
const headers = new Headers();
const options = new RequestOptions();
const url = 'http://localhost:8080/api/v1/pdf/print';
headers.append('Content-Type', 'application/json')
headers.append('Accept', 'application/pdf');
options.headers = headers;
return this.http.post(url, obj, {responseType: ResponseContentType.Blob})
.map(res => {
let blob = new Blob([res.blob()], {type: 'application/pdf'});
return blob;
})
.catch(this.handleError);
}
错误的句柄是这样的:
handleError(error: Response | any) {
let errMsg: string;
if (error instanceof Response) {
const body = error.json() || '';
let err;
if (body.errors != null) {
err = body.errors || JSON.stringify(body);
} else {
err = body.error || JSON.stringify(body);
}
errMsg = `${err}`;
console.error(`${error.status} - ${error.statusText || ''} ${err}`);
} else {
errMsg = error.message ? error.message : error.toString();
}
console.error(errMsg);
return Observable.throw(errMsg);
}
因此,当我收到这篇文章的后端响应时,pdf 可以正常工作,但是当我收到一些错误时,来自 Angular 的处理程序会获取 Blob,而不是从后端返回的 json。那么我该如何处理呢?
当我没有设置 responseType 时,错误可以正常工作,但不会生成 pdf。
【问题讨论】: