2017-12-05 10 views
0

いくつかの方法では、レスポンスボディを、他の観測値からの値に基づいて変更できないようです。HttpInterceptorは他の観測値からの値に基づいて応答ボディを変更します

リクエストを変更するのは簡単ですが、私はレスポンスをどのように行うのか分かりません。

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

私は基本的に新しいプロパティの 'message'を持つ新しい応答体を返したいと思います。

答えて

1

インターセプトが戻って観測できるので、翻訳サービスのgetEventにswitchMapできます。 Like So

+0

これはtranslateService.getの値に解決されますか?どのようにしてその価値を身体に付け加えることができますか? – Lars

+0

'translateService.get()'にマップを追加し、 'get()'関数の値としてeventbody.messageの値を返すべきマップを追加しました。 – theOriginalJosh

+1

私は身に直接書き込むことができなかったので、私はクローンイベントを作らなければなりませんでした。正しいパスに私を入れてくれてありがとう:)。私の答えを見てください。最終結果 – Lars

0

レスポンスボディを直接変更することはできませんので、クローンを返す必要があります。最終的な答えは下記を参照してください。

@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 } })); 
    }); 
    } 
} 
関連する問題