2017-12-21 9 views
-1

가능한 복제본에 대한 설명 : 전체 응답을 관찰하고 본문을 반환하는 방법을 묻는 질문이었습니다. "헤더를 읽는 법"이 아닙니다.Angular HTTP - Observable : 자습서 코드를 수정하여 전체 응답을 처리하고 여전히 Hero를 반환하는 방법

나는 각도를 배우고 투어 영웅 튜토리얼을 살펴 보았습니다.

전체 응답을 얻으려면 아래 코드를 수정하여 머리글에서 링크를 가져온 다음 영웅 []에게 반환 할 수 있습니다. 내가 제대로 이해하면

/** GET heroes from the server */ 
getHeroes(): Observable<Hero[]> { 
return this.http.get<Hero[]>(this.heroesUrl) 
    .pipe(
    tap(heroes => this.log(`fetched heroes`)), 
    catchError(this.handleError('getHeroes', [])) 
    ); 
} 

https://angular.io/tutorial/toh-pt6#tap-into-the-observable

+0

https://angular.io/guide/http#reading-the-full-response – jonrsharpe

+0

전체 응답을 얻으시겠습니까? –

+0

@RahulSingh이 코드는 응답 본문 만 가져오고 있습니다 (관찰 중). 전체 httpResponse 헤더에서 추출한 다음 본문을 따라 전달할 싶어요. – steve

답변

0

글쎄, 당신은 다음 res.body에 의해 res.headers 및 응답 본문에서 헤더에 액세스 할 수 있습니다, 추가 PARAM { observe: "response" }를 전달하려는.

@의 jonrsharpe의 의견을 바탕으로
return this.http.get<Hero[]>(this.heroesUrl { observe: "response" }) 
    .pipe(
    tap(res => this.log(`fetched extended response`)), 
    catchError(this.handleError('getHeroes', [])) 
    ); 
} 
+0

네, 그게 내가 원하는 일이지만 설정 관찰 : "응답"코드를 나눕니다. HttpResponse 은 Observable steve

+0

@steve yes로 변환 될 수 없기 때문에, 여러분의 메소드가 Observable 을 반환한다고 가정하기 때문에 실제로 Observable >을 반환합니다. 서명을 변경하거나 RxJS 연산자를 사용하여 본문을 '파이프'의 일부로 추출하십시오. 요청이 반환하는 것을 변경하거나 서명이 변경되지 않을 것으로 기대할 수는 없습니다. 당신은 조정을해야합니다. – jonrsharpe

+0

@jonrsharpe "RxJS 연산자를 사용하여 본문을 추출합니다." 그러나 헤더는 예상대로 아닙니다. 나는 그 질문을 갱신하고있다. – steve

0

, 내가 찾고 있던 코드는 다음과 같습니다

getHeroes(): Observable<Hero[]> { 

    return this.http.get<Hero[]>(url,{observe: "response"}) 
    .pipe(
    tap(res => this.log("headers:" + JSON.stringify(res.headers))), 
    map(res => res.body), 
    catchError(this.handleError('getHeroes', [])) 
); 

} 

내가 반응을 관찰하는 "지도 (고해상도 => res.body)"이 필요하고 여전히 반환 몸.

0
getHeros(): Observable<Hero[]> { 
    if (this.heros) { 
     return of(this.heros); 
    } 
    return this.http 
     .get<Heros[]>(this.herosPath) 
     .pipe(
     tap(data => console.log(JSON.stringify(data))), 
     tap(data => (this.patients = data), 
     catchError(this.handleError)) 
    ); 
    }