簡體   English   中英

攔截器如何終止處理 Angular 4?

[英]How interceptor terminate handle Angular 4?

我有一個 Ionic 3 應用程序項目,當應用程序收到來自服務器的響應時,我添加了一個攔截器,當響應的狀態等於 401 時,應用程序跳轉到登錄頁面,我使用app.getRootNav().setRoot(LoginPage) 但是,當帶有toast的頁面收到401響應時,仍然會出現toast,這是意料之中的

  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");
    }
)

那么當我跳轉到登錄頁面時,toast at request 頁面將顯示,如何終止 toast at request 頁面?

您可以在 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) ... })

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM