如何使用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语句块后添加返回事件;
。简单明了。谢谢