Angular 6拦截器无法正常工作

时间:2019-01-19 09:36:59

标签: angular6 angular-http-interceptors

我已经在Angular 6中编写了Http Interceptor。 目的是在返回302 status时重新加载主页。 (任何返回302状态的后端API) 我目前无法理解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 :(得分:1)

问题是您忘记了在地图操作符中返回值。地图操作员的主要目标是修改数据并返回

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