programing

Angular 2: HTTP 응답 본문에 액세스하는 방법

abcjava 2023. 3. 22. 20:35
반응형

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

  }
}

예를 들어 다음과 같습니다.gethttp 콜:

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

반응형