我已经在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
时,才应拦截它。
有人可以在这里帮忙吗?
答案 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
})