Angular 6-HttpInterceptors-HttpResponse主体未被修改



我只是在实现HttpInterceptor,其中我希望base64对请求体进行编码,base64对响应体进行解码。

  • 方法:HTTP Post请求/响应
  • 数据格式:json(这应该被编码/解码(

这是我所做的代码。当我调试它时,解码的数据(即json(被设置回event.body。但是,它并没有在服务中被接收,这实际上使http调用

@Injectable()
export class Base64Interceptor implements HttpInterceptor {
constructor(private base64UtilService: Base64UtilService) {
}
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
let requestClone = request.clone(
{
body: this.base64UtilService.encode(JSON.stringify(request.body)),
responseType: 'text'
}
)
return next.handle(requestClone).pipe(tap(event => {
if (event instanceof HttpResponse) {
debugger;
let decodedData = this.base64UtilService.decode(event.body);
event = event.clone({
body: decodedData
});
return event;
}
},
(err: any) => {
if (err instanceof HttpErrorResponse) {
console.log(err);
}
}))
}
}

我只是得到了来自服务器的相同响应,event.body的解码并没有反映出来。感谢

http调用就是这样进行的

sendActivationRequest(url: string, request: MyRequest): Observable<MyResponse> {
return this.httpClient.post<MyResponse>(url, request)
.pipe(map((response: MyResponse) => {
return response;
}), catchError((error) => {
return throwError(error);
}));
}

我通过使用map而不是tap成功获得了修改后的响应体:

return next.handle(requestClone).pipe(map(event => {...}));

这是因为地图与点击的行为:

从tap文档中:"对源Observable上的每个发射执行副作用,但返回与源相同的Observable。">

从地图文档中:"将给定的项目函数应用于源Observable发出的每个值,并将结果值作为Observable发送。">

最新更新