私はAUTH HttpInterceptor
持っている:Angular4インターセプタ変更応答
import {HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor,
HttpRequest} from '@angular/common/http';
import {AuthService} from '../service/auth.service';
import {Observable} from 'rxjs/Observable';
import {Injectable} from '@angular/core';
import {Router} from '@angular/router';
@Injectable()
export class AuthInterceptor implements HttpInterceptor {
constructor(private authService: AuthService,
private router: Router) {
}
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
const authHeader = this.authService.getToken();
const clone = req.clone({headers: req.headers.set('Authorization',authHeader)});
return next.handle(clone).do(() => {
}, err => {
console.log(err);
if (err instanceof HttpErrorResponse && err.status === 401) {
this.authService.clearToken();
this.router.navigate(['/auth/signin']);
return Observable.empty();
}
});
}
}
このインターセプタが正常に動作しますが、私は401を取得していたときに私がログインページにユーザーをリダイレクトしていますが、エラーがまだサービスに行くと、そのサービスではエラーメッセージを表示しています。このメッセージはサインインページに表示されます。だから私は応答を変更するか、if (err instanceof HttpErrorResponse && err.status === 401) {
ブロックで何かをしたい、この場合エラーを返さない。
return Observable.empty();
は
あなたがキャッチして、小さな例を書いてくださいすることができますか? – user2870934
@ user2870934、私は私の答えを編集しました。コードはほぼ同じですが、あなたは非常に近いです。 –