拦截器终止如何处理Angular 4?

问题描述 投票:0回答:1

我有一个Ionic 3的应用项目,当应用收到服务器的响应时,我添加了一个拦截器,当响应的状态等于401时,应用就会跳转到登录页面,我使用的是 app.getRootNav().setRoot(LoginPage). 但是,当有吐司的页面收到401响应时,仍然会出现吐司,这是意想不到的。

  intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    this.rest = this.inj.get(RestProvider);
    return next.handle(req).do(
        res => {
        ...
        },
        err => {
            if (err instanceof HttpErrorResponse) {
                if (err.status == 401) {
                    this.app.getRootNav().setRoot(LoginPage);
                    super.showToast(this.toastCtrl, "sorry, due to authorization, you must login again")
                    return;
                } else {
                    throw err;
                }
            }
        })
}

那么当我的HTTP请求这样的时候。

this.http.post(this.baseUrl + "/recvUsername",param)
.subscribe(
    res => {
      this.initRecvUsernames(res["data"]);
    },
    err => {
      console.error("get receive user error:" + err.message);
      super.showToast(this.toast, "get receive user error");
    }
)

那么当我跳转到登录页面的时候,就会出现请求时的敬酒页面,如何终止请求时的敬酒页面?

angular ionic3 interceptor
1个回答
0
投票

你可以在http params中传递一个标志,然后在拦截器中删除它。

const params = req.params;
const isPreventToast = params.has('preventToast');
params.delete('preventToast')
const newReq = req.clone({ params });
return next.handle(newReq).do(..., err => { if(!isPreventToast) ... })
© www.soinside.com 2019 - 2024. All rights reserved.