有些我似乎无法根据另一个可观察值的值来更改响应主体,而我只能在检索响应后才能获得该值。
更改请求非常简单,我不知道如何处理响应。
@Injectable()
export class MyHttpInterceptor implements HttpInterceptor {
constructor(private _injector: Injector) {
}
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(request).map((event: HttpEvent<any>) => {
if (!(event instanceof HttpResponse)) return event;
const translateService = this._injector.get(TranslateService);
// retrieved the key from the reponse, now need to retrieve data from the translateservice
translateService.get(`${event.body.key}`).subscribe((value: string) => {
event.body.message = value;
});
// how to return new response ??
return event.clone({ body: event.body });
});
}
}
所以基本上我想返回一个新的响应主体,上面有一个新的属性“消息”。
由于您无法直接更改响应正文,因此您必须返回一个克隆的响应正文。最终答案见下文。
@Injectable()
export class MyHttpInterceptor implements HttpInterceptor {
constructor(private _injector: Injector) {
}
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
const translateService = this._injector.get(TranslateService);
return next.handle(request)
// filter out only events that HTTP event.
.filter((event: HttpEvent<any>) =>(event instanceof HttpResponse))
//then switch the observable to get the response of the translate service.
.switchMap(event => translateService.get(`${event.body.key}`)
.map(value => event.clone({ body: { message:value } }));
});
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)