我正在尝试使用HttpInterceptor在Ionic中实现一个全局授权错误处理程序,如果从服务器返回403,它会重定向到HomePage:
import { Injectable } from '@angular/core';
import { HttpEvent, HttpInterceptor, HttpHandler, HttpRequest } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/catch';
import { NavController } from 'ionic-angular';
import { App } from "ionic-angular";
@Injectable()
export class ErrorInterceptor implements HttpInterceptor {
private navCtrl: NavController;
constructor(private app:App) {
this.navCtrl = app.getActiveNavs()[0];
}
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(req)
.catch((error, caught) => {
if (error.status == 403) {
this.navCtrl.setRoot('HomePage');
}
return Observable.throw(error);
}) as any;
}
}
但是,navCtrl在拦截器内部无法正常工作(也不应该使用)。 另一方面,在每个服务调用中添加重定向逻辑非常难以维护:
someComponentMethod() {
this.someService.findAll()
.subscribe(response => {
this.items = response;
},
error => {
if (error.status == 403) {
this.navCtrl.setRoot('HomePage');
}
});
}
我认为我的问题的主要观点是“当从服务器返回403时如何编写全局重定向机制”。上面的代码实际上不起作用:403错误发生,我可以通过拦截器内的代码在控制台中打印东西,但是'HomePage'没有被加载。
那么如何在Ionic中使用重定向正确处理403错误?