Angular 2: HTTP 응답 본문에 액세스하는 방법
Angular 2에서 다음 코드를 작성했습니다.
this.http.request('http://thecatapi.com/api/images/get?format=html&results_per_page=10').
subscribe((res: Response) => {
console.log(res);
})
콘솔의 응답을 출력하면 다음과 같이 표시됩니다.
나는 응답의 code to body 필드에 접속하고 싶다.'body' 필드는 밑줄로 시작합니다. 즉, 개인 필드입니다.console.log(res._body)'로 변경하면 오류가 발생하였습니다.
여기서 도움이 되는 게터 기능을 알고 계십니까?
및 확장.내용을 가져오려면text()
방법.
this.http.request('http://thecatapi.com/api/images/get?format=html&results_per_page=10')
.subscribe(response => console.log(response.text()))
이 API는 Angular 5에서 폐지되었습니다.대신 새로운 클래스에는.body()
방법.를 사용하여{responseType: 'text'}
를 반환한다.String
.
다음은 응답에 내장된 angular2를 사용하여 응답 본문에 액세스하는 예입니다.
import { Injectable } from '@angular/core';
import {Http,Response} from '@angular/http';
@Injectable()
export class SampleService {
constructor(private http:Http) { }
getData(){
this.http.get(url)
.map((res:Response) => (
res.json() //Convert response to JSON
//OR
res.text() //Convert response to a string
))
.subscribe(data => {console.log(data)})
}
}
예를 들어 다음과 같습니다.get
http 콜:
this.http
.get('http://thecatapi.com/api/images/get?format=html&results_per_page=10')
.map(this.extractData)
.catch(this.handleError);
private extractData(res: Response) {
let body = res.text(); // If response is a JSON use json()
if (body) {
return body.data || body;
} else {
return {};
}
}
private handleError(error: any) {
// In a real world app, we might use a remote logging infrastructure
// We'd also dig deeper into the error to get a better message
let errMsg = (error.message) ? error.message :
error.status ? `${error.status} - ${error.statusText}` : 'Server error';
console.error(errMsg); // log to console instead
return Observable.throw(errMsg);
}
메모.get()
대신.request()
.
당신에게도 추가 정보를 제공하고자 했습니다.extractData
그리고.handleError
필요할 때를 대비해서 필요한 방법을 찾아야 합니다.
응답 데이터는 JSON 문자열 형식입니다.앱은 response.json()을 호출하여 해당 문자열을 JavaScript 개체로 해석해야 합니다.
this.http.request('http://thecatapi.com/api/images/get?format=html&results_per_page=10').
.map(res => res.json())
.subscribe(data => {
console.log(data);
})
https://angular.io/docs/ts/latest/guide/server-communication.html#!#extract-data
저도 같은 문제가 있었고, 이것도 효과가 있었습니다.
this.http.request('http://thecatapi.com/api/images/get?format=html&results_per_page=10').
subscribe((res) => {
let resSTR = JSON.stringify(res);
let resJSON = JSON.parse(resStr);
console.log(resJSON._body);
})
그냥 참고만 하면 안 돼요?_body
직접 반대하시겠습니까?이렇게 사용하면 오류가 반환되지 않는 것 같습니다.
this.http.get('https://thecatapi.com/api/images/get?format=html&results_per_page=10')
.map(res => res)
.subscribe(res => {
this.data = res._body;
});
안타깝게도 대부분의 답변은 응답 본문에 텍스트로 액세스하는 방법을 나타냅니다.기본적으로 응답 객체의 본문은 스트림을 통과할 때 객체가 아닌 텍스트입니다.
Response 객체에 있는 Body 객체속성의 json() 함수를 찾습니다.MDN은 저보다 훨씬 더 잘 설명합니다.
Body mixin의 json() 메서드는 응답 스트림을 가져와 끝까지 읽습니다.본문 텍스트를 JSON으로 해석한 결과로 해결된 약속을 반환합니다.
response.json().then(function(data) { console.log(data);});
또는 ES6를 사용합니다.
response.json().then((data) => { console.log(data) });
출처 : https://developer.mozilla.org/en-US/docs/Web/API/Body/json
이 함수는 기본적으로 Promise를 반환하지만 이 함수는 다운스트림 소비를 위해 쉽게 Observatable로 변환할 수 있습니다(스트림 펀은 의도하지 않았지만 잘 작동합니다).
json() 함수를 호출하지 않으면 데이터는, 특히 Response 객체의 _body 속성에 액세스하려고 할 때, 텍스트로 반환됩니다.이것은 깊은 오브젝트를 찾고 있는 경우(속성이 있는 오브젝트나 단순히 다른 오브젝트로 변환할 수 없는 경우 등)에는 분명 원하는 것이 아닙니다.
.subscribe(data => {
console.log(data);
let body:string = JSON.parse(data['_body']);`
HttpResponse @angular/common/http 를 사용해 볼 수 있습니다.
subscribe((res: HttpResponse<any>) => { console.log(res.body) })
잊지 import { HttpResponse } from '@angular/common/http';
아래는 Angular의 모든 버전에서 작동합니다.
let body = JSON.parse(JSON.stringify(response)).body;
이것은 100% 나에게 있어서 작업입니다.
let data:Observable<any> = this.http.post(url, postData);
data.subscribe((data) => {
let d = data.json();
console.log(d);
console.log("result = " + d.result);
console.log("url = " + d.image_url);
loader.dismiss();
});
이거면 될 거야.json 응답일 경우 response.json()을 사용하여 본문을 가져올 수 있습니다.
this.http.request('http://thecatapi.com/api/images/get?format=html&results_per_page=10').
subscribe((res: Response.json()) => {
console.log(res);
})
언급URL : https://stackoverflow.com/questions/43394144/angular-2-how-to-access-an-http-response-body
'programing' 카테고리의 다른 글
유형을 사용하려면 JSON 개체(예: {"name" ""value"")가 필요하므로 JSON 어레이(예: [1,2,3])를 유형 '으로 역직렬화할 수 없습니다. (0) | 2023.03.22 |
---|---|
사용자가 입력을 일시 중지할 때까지 지연되는 키 켜기 이벤트를 트리거하려면 어떻게 해야 합니까? (0) | 2023.03.22 |
웹 팩 번들의 크기를 최소화하는 방법 (0) | 2023.03.22 |
react-dom을 사용한 jajest 단위 테스트에서 act()를 사용하는 경우 (0) | 2023.03.22 |
형식 문자 Angular 4에서 문자열을 부울로 변환하는 방법 (0) | 2023.03.22 |