我遇到了Angular 5,HTTP拦截器和errorHandler的问题。
我发送了一个http请求。响应可以是200或404(如果数据不存在)。 200与订阅该组件完美配合。 404不同,因为我从角度使用HttpInterceptor。如果发生错误,“捕获错误”功能会发回一个Observable错误,但是我无法从服务或组件中捕获此错误,而且我也不知道为什么。
test.component.ts
Label
test.service.ts
this.testService.findByProducId(product.id).subscribe(data => {
console.log(data);
// processing
},
err => {
console.log(err); // nothing here :(
});
httpListener(拦截器)
findByProductId(productId){
let url = this.getUrl() + "/product/" + productId;
// headers
let headers = this.setHttpHeaders();
return this.http.get(url, {headers: headers})
.map(res => res).share();
}
非常感谢您!
答案 0 :(得分:0)
尝试一下,它对我有用
component.ts
this.testService.findByProducId(product.id).subscribe(
data => console.log('success', data),
error => console.log('oops', error));
service.ts
return this.http.get(url, {headers: headers})
.map((response: Response) =>response.json())
答案 1 :(得分:0)
我终于找到了问题。我的拦截器中的函数“ catchError”似乎停止了该过程。这里是好的代码(也许我可以使用“ catch”功能,但出现错误):
error => {
if (this.logEnable) {
// log data
}
switch(error.status) {
case 400: {
break;
}
// not authorized
case 401: {
this.router.navigate(["/"]);
break;
}
case 404: {
// my specific 404 case
if (!this.router.url.includes("/test/create")) {
}
else {
// I want to return the error to my service.
Observable.of(error);
}
}
}
return Observable.throw(error);
}),