代码之家  ›  专栏  ›  技术社区  ›  Anders Metnik

Angular$http起始器

  •  0
  • Anders Metnik  · 技术社区  · 10 年前

    我的理解是,当我 $http.post() 像下面的代码一样,我的拦截器应该预处理不兼容的数据,并对其错误/成功方法作出响应。但当我这样做的时候 $q.reject(response.data); (我已经检查了数据是否存在)。然后在我的错误中,我会得到那些我拒绝的数据。但我没有 data .error 为空

    代码: LTS 是我的模块

    Http请求

    $http.post("/overview", searchCriterias).success(function(data) {
                    console.log('InboundController : success in http call');
                    $scope.searchState = "result";
                    $scope.result = data;
                }).error(function(data, status, headers, config) {
                    console.log('InboundController : error in http call');
                    $scope.searchState = "error";
                    console.log(data);
                    if (data.errorMessage)
                        $scope.result = data.errorMessage;
                    else
                        $scope.result = data;
                });
    

    拦截器

    LTS.factory('defaultHttpInterceptor', function($q) {
        return {
            response: function(response) {
                // do something on success
    //            console.log(response.headers());
                if (response.headers()['content-type'].indexOf("application/json;charset=UTF-8") > -1) {
    //                 Validate response, if not ok reject
                    var dataPresent = response.data;
                    if (dataPresent && dataPresent.state && dataPresent.state !== "OK") {
                        console.log(response.data);
                        return $q.reject(response.data);
                    } else {
                        return response.data;
                    }
                }
                return response;
            },
            responseError: function(response) {
                // do something on error
                console.log('defaultHttpInterceptor : http error');
                return $q.reject(response);
            }
        };
    });
    LTS.config(function($httpProvider) {
        $httpProvider.interceptors.push('defaultHttpInterceptor');
    });
    
    1 回复  |  直到 10 年前
        1
  •  0
  •   Anders Metnik    10 年前

    啊发现了 $q.reject(response) 已将.data解包到错误处理程序。
    所以我的 .error 由于 response.data 没有 .data ( response.data.data )(原因的)属性。

    我会让它成为未来的参考。