2017-09-22 38 views
1

採用了棱角分明4.3角4.3 - HTTP 401狀態 - 。Router.Navigate([「/登錄」]沒有導航

我堅持與401錯誤和router.Navigate一個很奇怪的問題,我處理catch中的異常和檢查錯誤狀態如果status是401,那麼導航到登錄頁面在這個狀態下,router.navigate不起作用,只有當status是401 [控制檯沒有錯誤]時它才工作如果status是404然後this.router.navigate(以未找到路由組件]工作正常,這是我的代碼 -

protected get(url: string, options?: RequestOptionsArgs): Observable<Response> { 
    return this.http.get(url, options)  
        .catch((response) => { 

         if (response.status === 401) { 
          console.log('401 error - navigating'); 
          this.router.navigate(['/login']); 
          return Observable.of(response);         
         } 
         return Observable.throw(response); 
        }); 

};

如果錯誤代碼是404,那麼router.Navigate的工作沒有任何問題。請參見下面的代碼[在此代碼router.navigate工作正常,並導航到NOTFOUND頁] -

protected get(url: string, options?: RequestOptionsArgs): Observable<Response> { 
     return this.http.get(url, options)  
         .catch((response) => { 

          if (response.status === 404) { 
           console.log('404 error - navigating'); 
           this.router.navigate(['/notfoundpage']); 
           return Observable.of(response);         
          } 
          return Observable.throw(response); 
         }); 
}; 
+0

你檢查response.status。你確定它是401嗎? –

+0

是的,控制檯顯示相應的日誌消息 - '401錯誤.....'。它打印控制檯消息,即狀態是401 – user2216584

回答

1

我認爲更好的方式返回可觀察扔的。然後在組件中捕獲它並導航到組件所需的路線。

protected get(url: string, options?: RequestOptionsArgs): Observable<Response> { 
    return this.http.get(url, options)  
        .catch((response) => { 

         if (response.status === 401) { 
          console.log('401 error - navigating'); 
          return Observable.throw('Unauthorized');        
         } 
         return Observable.throw(response); 
        }); 

和組件

ngOnInit(): void { 
    this.yourService.yorMethod() 
     .subscribe(resp => { 
      your code 
     }, (err) => { 
      if (err === 'Unauthorized') { this.router.navigate(['/login']); 
     }); 
} 
+0

處理組件可能會正常工作,但我已經寫了一個Http封裝器,它將請求發送到服務器。處理組件需要處理每個組件來照顧401,我想集中這個部分,所以我在http wrapper中這樣做。真的很讓人驚訝,404的工作正常,但401. – user2216584

+0

嘿@ user2216584,你能找到解決方案嗎?我面臨同樣的問題。 – Lajon

+0

@Lajon對不起,遲到的迴應!我的應用程序內部存在導致報告問題的問題。希望你現在能解決你的問題。 – user2216584