2017-09-22 11 views
1

は角4.3を使用してナビゲートしていない角4.3 - HTTP 401状況 - 。。Router.Navigate([「/ログインは」]

私は401エラーとrouter.Navigateに関連した非常に奇妙な問題で立ち往生しています私はステータスが401の場合はログインページに移動するこの状態ではrouter.navigateは機能しない、ステータスが401の場合のみ動作しない[コンソールでエラーなし]ステータスが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はうまく動作し、ページに移動しません] -

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 error .....」です。コンソールメッセージが表示されます。つまり、Statusは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ラッパーでそれをやりたいのです。それは本当に404がうまく動作するのは驚くべきことですが、401. – user2216584

+0

ちょっと@ user2216584、あなたはこれのための解決策を見つけることができましたか?私は同じ問題に直面しています。 – Lajon

+0

@Lajon遅く応答して申し訳ありません!報告された問題を引き起こしていたアプリケーションの内部に問題がありました。今までに問題を解決してくれることを願っています。 – user2216584

関連する問題