2017-01-05 1 views
2

오류가있는 http 호출에서 발생하는 동작을 이해하는 데 어려움이 있습니다.Angular2 XHR 요청 오류 처리 요청 : 실제 본문을 가져올 수 없습니다.

목표는 403 또는 400 응답에서 서버가 반환 한 오류 메시지를 기반으로 다른 동작을 갖는 것입니다. 크롬 네트워크를 사용하는 경우

나는 메시지

enter image description here

그러나 오류의 CONSOLE.LOG을 할 때 내가 얻을 모든 신체의 ProgressEvent 객체가를 볼 수 있습니다.

enter image description here

는 문제의 코드는 매우 간단하고, JSON은 accesible되는 반환과 (200)는 잘 처리됩니다.

this.service.myFunction(this.email).subscribe(
     auth => console.log(auth), // works fine 
     error => console.log(error) 
    ); 

실제 통화에서 캐치를 시도했지만 운이 없었습니다.

this.myFunction.get(url).map(res => res.json()) 
    .catch((err: Response) => Observable.throw(err.json()) ); //  throw the error, which is also the object described above 

내가 잘못하고있는 것에 대해 알고 있습니까?

감사

답변

2

이 시도 :

this.service.myFunction(this.email).subscribe(
    auth => console.log(auth), // works fine 
    error => console.log(error.text()) 
); 

응답의 각도이 문서는 말한다 :

답변서의 인터페이스는, 페치 사양에 정의 된 응답 생성자에서 영감을하지만, 본문은 여러 번 액세스 할 수있는 정적 값으로 간주됩니다. 구현에는 다른 차이점이 있지만 이것이 가장 중요합니다.

따라서 .text()이 더 이상 응답 본문을 보내지 않으면 서버 구현을 변경하여 200 OK와 오류 메시지를 보내야합니다.

나는 문제는 XMLHttpRequest의 상태 헤더를 읽어 변경 한 후 각도의 HTTP 라이브러리가 몸 ... (Read this) 답변에 대한

+0

덕분에 나는이 같은 의심을 읽는 중지 것 같다. .text()를 사용하면'{ "isTrusted : true }이 나옵니다. 그래서 충분하지는 않습니다. 최선의 해결책은 오류인지를 알 수있는 200 가지 방법이 될 것입니다. –

+1

해당 제품의 API 만 200 OK와 상태 및 메시지가 포함 된 Json Response 객체가 있습니다. 내 경우, 그것은 오류 상태 코드와 오류 메시지와 함께 작동하지만 당신과의 차이를 볼 수 없습니다 ... 당신은 서버 구현에 따라 다른 종류의 신체 반응을 가질 수 있습니다. 각도 2 지원'body : string | Object | ArrayBuffer | Blob;' –