我想,以便相应地做出反应拦截401和其他错误。这是我的拦截器:HttpInterceptor在角4.3:拦截400个错误响应
import { LoggingService } from './../logging/logging.service';
import { Injectable } from '@angular/core';
import { HttpInterceptor, HttpHandler, HttpRequest, HttpEvent, HttpResponse, HttpErrorResponse } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/do';
@Injectable()
export class TwsHttpInterceptor implements HttpInterceptor {
constructor(private logger: LoggingService) { }
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
this.logger.logDebug(request);
return next.handle(request)
.do(event => {
if (event instanceof HttpResponse) {
this.logger.logDebug(event);
}
});
}
}
虽然这非常适用于200名的请求,不拦截错误respsonses
所有我在Chrome的开发者控制台中看到的是这样的:
zone.js:2616 GET http://localhost:8080/backend/rest/wrongurl 404 (Not Found)
或者这
zone.js:2616 GET http://localhost:8080/backend/rest/url 401 (Unauthorized)
我会像我的拦截器来处理这一点。我错过了什么?
好吧,但是这给了我这个错误:[ts] 类型'(err:any)=> void'的参数不能分配给类型为'(err:any,caught:Observable >)=> ObservableInput <{}>'。 类型'void'不可分配为键入'ObservableInput <{}>'。 –
Tim
添加“return Observable.throw(err);”解决了这个问题。编辑你的答案,我会接受它! – Tim
@Tim喜欢吗?对不起,我没有在发布之前对它进行测试:) – 0mpurdy