我正在使用Angular 5.1.0并尝试读取服务器发送的文件作为对GET请求的响应。
我这样做:
getImage(imageUrl: string) {
const httpOptions = {
headers: new HttpHeaders({
'Authorization': 'Basic ' + this.authService.getBasicAuthString(),
resourceType: 'blob'
})
};
return this.http.get<File>(imageUrl, httpOptions);
}
但是,看起来,标记为固定here的错误对于5.1.0并不固定,并且我不断收到HttpErrorResponse,说它无法解析收到的响应(响应代码为200)。
我正在尝试重写5.1.0的bug中提供的解决方法,但社区并没有很快的响应。
解决方法是:
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(req).catch(event => {
if (event instanceof HttpErrorResponse) {
const response = event as HttpErrorResponse;
if (response.headers.get('content-type') === 'application/json') {
return Observable.throw(new HttpErrorResponse({
error: JSON.parse(response.error),
headers: response.headers,
status: response.status,
statusText: response.statusText,
url: response.url,
}));
}
}
return Observable.throw(event);
})
}
看起来不错,但问题如下:
Property 'catch' does not exist on type Observable<HttpEvent<any>>
。
有人可以帮助我吗,因为我不是那个角色大师。
在Ritwick Dey的回答之后更新(我要求第一部分没有得到答复,因为对于其他人来说,这可能看起来不那么好了): < / p>
现在,当找到所有内容时,我不需要抛出所有其他拦截器并将原始响应返回给我的GET方法的订阅者。我不想要一次投掷,因为它再次出现同样的错误:
message: "Http failure during parsing for **logo-url**"
name: "HttpErrorResponse"
我想使用(),如提到here,但是当用返回
ERROR in src/app/shared/parser.interceptor.ts(16,5): error TS2322: Type 'Observable<{} | HttpProgressEvent | HttpSentEvent | HttpHeaderResponse | HttpResponse<any> | Http...' is not assignable to type 'Observable<HttpEvent<any>>'.
Type '{} | HttpProgressEvent | HttpSentEvent | HttpHeaderResponse | HttpResponse<any> | HttpUserEvent<a...' is not assignable to type 'HttpEvent<any>'.
Type '{}' is not assignable to type 'HttpEvent<any>'.
Type '{}' is not assignable to type 'HttpUserEvent<any>'.
Property 'type' is missing in type '{}'.
src/app/shared/parser.interceptor.ts(31,14): error TS2304: Cannot find name 'of'.
使用以下子句导入OF:
import 'rxjs/add/observable/of';
答案 0 :(得分:1)
您是否从rxjs导入了catch
运算符?
import 'rxjs/add/operator/catch'
如果您正在使用Rxjs 5.5,请按照此https://stackoverflow.com/a/47203943/6120338
进行操作