HttpErrorInterceptor 未在 Angular 中重定向
HttpErrorInterceptor not redirecting in Angular
我正在尝试制作一个全局错误拦截器,以便在每个错误上它都会使用 error=true
查询参数重定向到主页。它以某种方式捕获错误,记录它但不重定向。我做错了什么?
HttpErrorInterceptor:
@Injectable()
export class HttpErrorInterceptor implements HttpInterceptor {
constructor(private router: Router) {
}
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(request)
.pipe(
catchError((error: HttpErrorResponse) => {
let errorMsg = '';
if (error.error instanceof ErrorEvent) {
errorMsg = `Error: ${error.error.message}`;
} else {
errorMsg = `Error Code: ${error.status}, Message: ${error.message}`;
}
const urlParams = new URLSearchParams(window.location.search);
this.router.navigate(['main'], {queryParams: {error: true, sesskey: urlParams.get('sesskey')}});
console.log(errorMsg);
return throwError(errorMsg);
})
)
}
}
app.module.ts:
providers: [
{
provide: HTTP_INTERCEPTORS,
useClass: HttpErrorInterceptor,
multi: true
},
我认为这是有效的,你是如何测试它的
对我来说它是这样工作的
export class AppComponent {
constructor(private http: HttpClient) {
this.getData();
}
getData() {
const url = 'Fake url';
return this.http.get(url).subscribe();
}
}
我正在尝试制作一个全局错误拦截器,以便在每个错误上它都会使用 error=true
查询参数重定向到主页。它以某种方式捕获错误,记录它但不重定向。我做错了什么?
HttpErrorInterceptor:
@Injectable()
export class HttpErrorInterceptor implements HttpInterceptor {
constructor(private router: Router) {
}
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(request)
.pipe(
catchError((error: HttpErrorResponse) => {
let errorMsg = '';
if (error.error instanceof ErrorEvent) {
errorMsg = `Error: ${error.error.message}`;
} else {
errorMsg = `Error Code: ${error.status}, Message: ${error.message}`;
}
const urlParams = new URLSearchParams(window.location.search);
this.router.navigate(['main'], {queryParams: {error: true, sesskey: urlParams.get('sesskey')}});
console.log(errorMsg);
return throwError(errorMsg);
})
)
}
}
app.module.ts:
providers: [
{
provide: HTTP_INTERCEPTORS,
useClass: HttpErrorInterceptor,
multi: true
},
我认为这是有效的,你是如何测试它的
对我来说它是这样工作的
export class AppComponent {
constructor(private http: HttpClient) {
this.getData();
}
getData() {
const url = 'Fake url';
return this.http.get(url).subscribe();
}
}