在我的拦截器中,我想在响应中放置一个管道,如果响应statusCode是401则进行注销,但问题是当我放置一个catchError时,observable不是HttpEvent类型,并且拦截函数需要返回该类型?
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
const authToken = `Agency ${this.auth.token}`;
const requestWithHeaders = req.clone({ setHeaders: {'Content-Type': 'application/json'}});
if (!!this.auth.token) {
const authReq = requestWithHeaders.clone({ setHeaders: { Authorization: authToken} });
return next.handle(authReq).pipe(
catchError(er => {
if (er.status === 401) {
this.auth.logout();
}
return er;
})
);
} else {
return next.handle(requestWithHeaders);
}
}
}.
抛出一个将被转发的新错误而不是仅返回错误:
import { Observable, throwError } from 'rxjs';
import { catchError } from 'rxjs/operators'
...
catchError(er => {
if (er.status === 401) {
this.auth.logout();
}
return throwError(er);
})
您可以通过以下方法处理您的Error
响应,试试这个
return next.handle(clonedRequest).do((event: HttpEvent<any>) => {}, (error: any) => {
if (error instanceof HttpErrorResponse) {
if (error.status == 401 || error.status == 403) {
this.auth.logout();
}
}
});
我希望这能解决你的问题:)