首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >angularJS:自定义404拦截器句柄-使用url进行响应

angularJS:自定义404拦截器句柄-使用url进行响应
EN

Stack Overflow用户
提问于 2015-03-13 16:26:57
回答 4查看 3.6K关注 0票数 17

在我的应用程序中,我使用拦截器来捕获所有http响应错误,如下所示:

代码语言:javascript
复制
var response = function(response) {
  if(response.config.url.indexOf('?page=') > -1) {
    skipException = true;
  }
  return response;
}

var responseError = function(rejection) {
  if (rejection.status === 401 || rejection.status === 403) {
    /**/
  }
  else if (rejection.status >= 500 || rejection.status === 0) {
    /**/
  }
  else if (rejection.status === 404 && !skipException) {
    /**/
  }
  else if (rejection.status === 404 && skipException) {
    /**/
  }
  else{
    /**/
  }
  return $q.reject(rejection);
};

当我转到我的控制器时(当我的getArticles方法返回一些数据,而不是404时-当文章数组为空时),一切都是正常的:带有skipException == true的404被捕获。

但是当我的文章数组为空时,服务器返回404,当我进入这个控制器时,我无法获取response.config.url --没有捕获任何响应,但是为什么呢?我以为拦截器会捕获所有的响应。

代码语言:javascript
复制
    $timeout(function() {
      $scope.getArticles();
    }, 100);

$scope.getArticles有这样的代码:

代码语言:javascript
复制
getDataService.getArticles($scope.pageNum).then(function(response) {
 /**/
});

服务:

代码语言:javascript
复制
var getEventsByScrollService = function(num) {
  var deferred = $q.defer();
  $http.get(***, {

    })
    .success(function(response) {
      deferred.resolve(response);
    }).error(function(err, status) {
      if (status === 404){
        deferred.resolve([]);
      }
      else{
        deferred.reject(err);
      }
    });
  return deferred.promise;
};

如何根据URL有条件地捕获404?因为这是:

代码语言:javascript
复制
if(response.config.url.indexOf('?page=') > -1) { 

并不总是有效的。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-04-29 16:14:49

所以..。我已经这样做了:

代码语言:javascript
复制
    if(rejection.config.url.indexOf('?page=') > -1) {
      skipException = true;
    }
票数 1
EN

Stack Overflow用户

发布于 2015-04-30 01:11:34

为了提高任何$http服务调用的可维护性和可扩展性,可以这样做:

代码语言:javascript
复制
// Service call
$http.get({url:'/?page=', ignoreErrors: true})

// Interceptor
if(rejection.status === 404 && !rejection.config.ignoreErrors) {

}
票数 3
EN

Stack Overflow用户

发布于 2015-04-29 15:26:34

你可以去查一下Restangular,这可能对你的目的有用。它内置了很好的拦截器方法。它是否真的对您有好处将取决于您是否使用了RESTful应用程序接口。https://github.com/mgonto/restangular

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29027724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档