代码之家  ›  专栏  ›  技术社区  ›  Atul

角6拦截器未按预期工作

  •  0
  • Atul  · 技术社区  · 5 年前

    我写了一篇 Http Interceptor 角6。 目标是在以下情况下重新加载主页: 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)

    我不明白这是为什么?

    为什么请求像我一样被阻止 不篡改 对于请求,它应该按原样传递到后端REST端点。

    只有在 HttpResponse 返回时 302 error 代码。

    有人能帮忙吗?

    1 回复  |  直到 5 年前
        1
  •  1
  •   Dmitriy Kavraiskyi    5 年前

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

             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
            })
    
    推荐文章