如何使用HttpInterceptor拦截angular 4中的响应

如何使用HttpInterceptor拦截angular 4中的响应,angular,angular-http-interceptors,Angular,Angular Http Interceptors,我有以下拦截器: @Injectable() export class TokenInterceptor implements HttpInterceptor { constructor(private tokenService: TokenService) { } intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> { const

我有以下拦截器:

@Injectable()
export class TokenInterceptor implements HttpInterceptor {

  constructor(private tokenService: TokenService) { }

  intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    const token = this.tokenService.getToken();

    if (token) {
      const authReq = req.clone({
        headers: req.headers.set('Authorization', `Bearer ${token}`)
      });

      return next.handle(authReq);
    }

    return next
      .handle(req)
//
      .getSomehowTheResponse()
      .andSaveTheTokenInStorage()
      .andPropagateNextTheResponse()
  }
}
@Injectable()
导出类TokenInterceptor实现HttpInterceptor{
构造函数(私有令牌服务:令牌服务){}
截取(req:HttpRequest,next:HttpHandler):可观察{
const token=this.tokenService.getToken();
如果(令牌){
const authReq=req.clone({
headers:req.headers.set('Authorization','Bearer${token}`)
});
返回next.handle(authReq);
}
下一个返回
.句柄(req)
//
.getSomehowTheResponse()的用法
。并保存Token存储()
.并传播下一个响应()
}
}
我想将响应头中的令牌保存在本地存储中,所有教程都显示了如何截取请求,但没有非常清楚地显示响应。

下一步。handle(req)
返回一个可观察的标记,以便您可以订阅它:

返回next.handle(req).map((事件:HttpEvent

您还需要导入库

    import 'rxjs/add/operator/map';
然后按如下所示使用。还需要返回事件对象,以便在subscribe()函数中接收它

    return next.handle(req).map((event: HttpEvent<any>) => {
      if (event instanceof HttpResponse) {
        // do stuff with response and headers you want
      }
      return event; 
    });
返回下一个.handle(req).map((事件:HttpEvent)=>{
if(HttpResponse的事件实例){
//用你想要的回复和标题做一些事情
}
返回事件;
});
您可以尝试以下方法:

步骤1:导入以下内容:

import { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent } from 
"@angular/common/http";

import { Observable } from "rxjs";

import { tap } from "rxjs/operators";
步骤2:如果您使用的是compact rxjs,您可以将“tap”替换为“do”

export class RoleInterceptor implements HttpInterceptor {
    intercept(req: HttpRequest<any>, next: HttpHandler): 
        Observable<HttpEvent<any>>{
            return next.handle(req).pipe(tap(
                event=>{
                    console.log('Intercepted! response',event);
                }
            ))    
    }
}
导出类RoleInterceptor实现HttpInterceptor{
拦截(请求:HttpRequest,下一步:HttpHandler):
可观察{
返回下一个.handle(请求).pipe(抽头(
事件=>{
log('Intercepted!response',event);
}
))    
}
}

我收到一个ts错误
类型“Observable”不可分配给类型“Observable”。
它在typescript中未编译。我明白了,哪一行?@Alexandroolaru:在if语句块后添加
返回事件;
。简单明了。谢谢