2016-10-11 7 views
0

API 서비스에서 데이터를 가져 오는이 VUEJS/VUEJS 리소스 스 니펫이 있습니다.API 서비스는 200을 반환하지만 실제로는 404입니다.

fetchData: function(name){ 
      var self = this; 
      self.$http.get('http://www.apiservice.com/', { 
      params: { 
       city: name 
      }, 
      }).then((response) => { 
      // success callback 
      toastr.success('Success!'); 
      console.debug(response); 
      }, (response) => { 
      // error 
      toastr.error('Something went wrong!') 
      }); 
     } 

그리고 그것은 항상 200 OK 응답을 반환합니다 ... 그래서 난 정말 toastr.error, 그 항상 "성공"의 경우를 표시하는 방법을 모르겠어요.

잘못된 응답은 다음과 같습니다 : {Response: "False", Error: "City not found!"}.

내 질문

은 어떻게 200 OK 반환의 응답에 false을 인출하고, 오류가 발생 할 수 있습니다

?

+0

api 서버가 응답으로 404를 반환하지 않는 한 일종의 해킹을 사용하지 않으면 (즉 응답을 확인하고받은 응답이 예상 한 것과 다른 경우 오류 기능을 호출 할 수 없음) –

답변

1

"no response found"를 HTTP 200으로 반환하는 것은 잘못된 것처럼 보이지만 API를 제어 할 수없는 경우 성공 함수에서 처리해야합니다.

함수에 오류 처리 코드를 넣고 적절하게 전화 :

fetchData: function(name){ 
    var self = this; 
    self.$http.get('http://www.apiservice.com/', { 
    params: { 
     city: name 
    }, 
    }).then((response) => { 
     // success callback 
     if (response.Response === "False") { 
      onError(response) 
     } else { 
      toastr.success('Success!'); 
      console.debug(response); 
     } 
    }, onError); 
} 

function onError(response) { 
    toastr.error('Something went wrong!') 
} 
+0

감사합니다. 오류'ReferenceError : 변수를 찾을 수 없습니다 : onError', 줄'}, onError);'. – Adam

0

당신은 거부 결의에서 약속을 전환 체인 약속을 사용할 수 있습니다

fetchData: function(name){ 
      var self = this; 
      self.$http.get('http://www.apiservice.com/', { 
      params: { 
       city: name 
      }, 
      }).then(response)=>{ 
       if(response.Response === "False"){ 
       return Promise.reject(response) 
       }else{ 
       return response 
       } 
      },(a)=>a).then((response) => { 
       // success callback 
       toastr.success('Success!'); 
       console.debug(response); 
      }, (response) => { 
       // error 
       toastr.error('Something went wrong!') 
      }); 
     } 

중요한 부분은 이것이다 :

then(response)=>{ 
    if(response.Response === "False"){ 
    return Promise.reject(response) 
    }else{ 
    return response 
    } 
},(a)=>a) 

응답이 유효하고 데이터에 Response: "False" 우리는 거부 된 약속을 반환합니다. 그렇지 않으면 응답 데이터를 반환합니다. 응답 데이터는 다음 번에 then과 같이 실행되지만 유효하지 않은 데이터는 이미 거부되었습니다.

관련 문제