javascript - HttpInterceptor 根据其他 observable 的值更改响应主体

标签 javascript angular typescript angular-http-interceptors

有些我似乎无法根据另一个可观察值的值更改响应主体,我只能在检索到响应后才能获得该值。

更改请求非常简单,我不知道如何处理响应。

@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 } }));
    });
  }
}

关于javascript - HttpInterceptor 根据其他 observable 的值更改响应主体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47656992/

相关文章:

javascript - 使用 createElement 创建一个按钮,然后更改其颜色

javascript - 音频播放器上显示 2 位小数时间

angular - Ionic 3 - 无法点击谷歌地图上方显示的警报对话框

angular - 在 Material 工具提示中添加 href

javascript - typescript 编译 vendor ,排除不起作用

javascript - 如果我包含 jQuery,则无法找到基本功能

javascript - 我的 js 代码的错误消息 - Uncaught TypeError : Cannot set property '' of undefined

angular - 无法从我的 Controller /构造函数访问输入

typescript - 如何从 angular2 上的 setInterval 访问构造函数属性

node.js - TypeDI @Inject() 不起作用,但 Container.get() 起作用