API服务返回200,但实际上是404

时间:2016-10-11 17:53:38

标签: javascript vue.js vue-resource

我有这个从API服务获取数据的VUEJS / VUEJS资源片段。

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并抛出错误?

2 个答案:

答案 0 :(得分:1)

似乎错误的API设计返回"没有找到响应"作为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!') 
}

答案 1 :(得分:0)

您可以使用promise chaining将promise从resolve转换为拒绝:

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",我们将返回被拒绝的承诺,否则我们只返回响应数据,然后将其包装在已解决的承诺中,然后再执行下一个{{1}像以前一样执行,但是已经拒绝了无效数据。