Angular 6 拦截器未按预期工作
Angular 6 Interceptor not working as expected
我在Angular 6 中写了一个Http Interceptor
。
目标是在返回 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)
我无法理解为什么会出现这种行为?
为什么请求被阻止,因为我 没有篡改 请求应该按原样传递到后端 rest 端点。
只有当 HttpResponse
返回 302 error
代码时才应该被拦截。
有人可以帮忙吗?
问题是您忘记了 return 地图运算符中的值。地图运算符的主要目标是修改数据并 RETURN 返回。
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
})
我在Angular 6 中写了一个Http Interceptor
。
目标是在返回 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)
我无法理解为什么会出现这种行为?
为什么请求被阻止,因为我 没有篡改 请求应该按原样传递到后端 rest 端点。
只有当 HttpResponse
返回 302 error
代码时才应该被拦截。
有人可以帮忙吗?
问题是您忘记了 return 地图运算符中的值。地图运算符的主要目标是修改数据并 RETURN 返回。
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
})