Angular 6 Interceptor не работает должным образом - PullRequest
0 голосов
/ 19 января 2019

Я написал Http Interceptor на Angular 6.Цель состоит в том, чтобы перезагрузить домашнюю страницу, когда возвращается 302 status.(любой внутренний API, возвращающий статус 302) В настоящее время я не могу понять, почему Interceptor ведет себя так, как оно есть.

Ниже приведен код:

@Injectable()
export class ResponseHandler implements HttpInterceptor{


    constructor(){

    }

    intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {


     return next.handle(request).pipe(


            map((event: HttpEvent<any>) => {

                if(event instanceof HttpResponse){
                    if(event.status === 302){
                        console.log('HttpResponse 302 status ');
                        window.location.reload();
                        return EMPTY;
                    }
                }

            })
        )

    }

}

Фактическое поведение:

1) Я впервые захожу на домашнюю страницу явно.(e.g: /home)

2) Но странно то, что первоначальный вызов для извлечения самого возраста не происходит

3) Кажется, запрос заблокирован, достигнув сервера.

4) Когда перехватчик удален, этот первоначальный вызов происходит (/home)

Я не могу понять, почему это поведение?

Почему запрос блокируется, поскольку я НЕ вмешиваюсь в запрос, который должен быть передан как есть, чтобы завершить конечную точку покоя.

Он должен быть перехвачен только тогда, когдаHttpResponse возвращается с кодом 302 error.

Кто-нибудь может помочь, пожалуйста?

1 Ответ

0 голосов
/ 19 января 2019

Проблема в том, что вы забыли вернуть значение в оператор карты. Основная цель оператора карты - изменить данные и ВОЗВРАТИТЬ их обратно.

         map((event: HttpEvent<any>) => {

            if(event instanceof HttpResponse){
                if(event.status === 302){
                    console.log('HttpResponse 302 status ');
                    window.location.reload();
                    return EMPTY;
                }
            }

            return event;  // here you return value back
        })
...