2017-10-25 4 views
1

응답 POST 요청의 상태 코드를 얻으려면 어떻게해야합니까? 내 서비스 메서드의 반환 : 내 구성 요소에서각도 2 4 HttpClient. POST 요청 - 상태 코드를 얻는 방법

return this.httpClient.post(url, body, {observe: 'response'}) 
      .catch(HandleError.handleErrorClient); 

나는이 방법을 호출하고 구독 :

.subscribe(
     res => { 
      console.log(res); 
      console.log(JSON.stringify(res)); 
      this.responseStatus = res.status; 
      console.log(this.responseStatus); 
     }, 
     err => { 
      this.responseStatus = err.status; 
     }); 

을하지만 브라우저 콘솔에서 아무것도 없다 -하지만 요청은 this.responseStatus = err.status 반환 올바른 상태를 오류가 포함 된 경우 코드가 있지만 res.status 또는 res에는 상태 코드 만 포함되며 응답 본문 만 포함됩니다.

편집 :

구성 요소 :

responseStatus: number; 

loginUser() { 
    this.loginData = this.loginForm.getRawValue(); 
    this.userLoginService.loginUser(this.loginData) 
     .subscribe(
      res => { 
       console.log('bla bla'); 
       this.responseStatus = res.status; 
      }, 
      err => { 
       console.log(err.status); //401 
       console.log(err.error.error); //undefined 
       console.log(JSON.parse(err.error).error); //unauthorized 
       this.responseStatus = err.status; 
      }); 
} 

서비스 :

import {Http} from "@angular/http"; 
import {HttpClient} from '@angular/common/http'; 

... 

    constructor(private http: Http, private httpClient: HttpClient) { 
    } 


    loginUser(loginData: LoginForm) { 
     return this.httpClient.post(this.loginURL, loginData, {observe: 'response'}) 
      .catch(HandleError.handleError); 
    } 

핸들 error.ts

export class HandleError { 

    static handleError(error: Response | any) { 
     let errMsg: string; 
     if (error instanceof Response) { 
      const body = error.json() || ''; 
      const err = body.error || JSON.stringify(body); 
      errMsg = `${error.status} - ${error.statusText || ''} ${err}`; 
     } else { 
      errMsg = error.message ? error.message : error.toString(); 
     } 
     console.error(errMsg); 
     return Observable.throw(error); 
    } 
} 

POST :/API/로그인 enter image description here 로그인이 올바르게되었지만 더 이상은 아닙니다 ... 브라우저 콘솔에서 예상했습니다 : console.log('bla bla');. Http으로는 문제가 없습니다.

+0

console.log resp.headers를 사용해 보셨나요? –

+0

가끔 로그 수준 출력이 "모든 수준"으로 설정되어 있습니까? 그렇지 않다면, 당신은 (당신이하는) 에러를 볼 수도 있습니다. – Tim

+0

@VivekDoshi,'console.log (res.headers)'는 도움이되지 않습니다. @ 킴, 무슨 뜻인지 모르겠다. Firefox를 사용하고 브라우저 콘솔에 모든 옵션 (네트워크, CSS, 보안, 서버)이 설정되어 있습니다. 그러나'hubp (res => console.log ('blah blah blah'))'도 출력하지 않습니다. 그러나 정상적인'Http' (HttpClient가 아닌)를 사용하면 모든 것이 작동합니다. . – user7337867

답변

0

HttpClient error page의 "오류 세부 사항보기"를 참조하십시오. HttpClient은 더 이상 Response 개체를 반환하지 않으므로 변수가 any으로 처리됩니다. 오류 유형을 ErrorResponse으로 설정하면됩니다. 그러면 http 상태 코드를 얻기 위해 error.status를 확인할 수 있습니다. 그리고 이상한 경우 메시지 유형이 오류 (또는 그렇지 않은 경우 error.error) 인 경우 메시지를 보려면 error.error.message이 필요합니다. 확실히 HttpClient로 전환 할 때 몇 가지 문제가 있습니다.