Angular资源中间件以捕获响应

时间:2015-07-02 18:03:41

标签: angularjs

我有一个角度服务,看起来像:

service('PortfolioService', ['$resource', function($resource) {
    return $resource('/api/', {}, {
        stock_positions: {
            method: 'GET',
            url: '/api/stock_positions',
            isArray: false
        }
    });
}]).

在控制器中:

PortfolioService.stock_positions(function someCB(result){       
   //do something with the result
});

如果您未登录,则api会返回一个如下所示的对象:

{
  error: "Login required",
  redirect: "/login"
}

我想在资源中捕获它,处理它(重定向到/ login),而不是传递给控制器​​中的someCB。

有没有办法用$ resource做到这一点?

2 个答案:

答案 0 :(得分:3)

我认为这可以通过角度拦截器来实现。

https://docs.angularjs.org/api/ng/service/$http

 $httpProvider.interceptors.push(['$location', function($location) {
      return {
       'response': function(response) {
          if(response.redirect.indexOf('/login'){
          // redirect to login
          }
          return response;
        }
      };
    }]);

答案 1 :(得分:0)

看起来我只需要执行以下操作:

service('PortfolioService', ['$resource', function($resource) {
    return $resource('/api/', {}, {
        stock_positions: {
            method: 'GET',
            url: '/api/stock_positions',
            isArray: false,
            interceptor:{
                response:function(response){
                    //do stuff here to catch the response before passing it on.
                    return response;
                },
                responseError: function(rejection){
                    console.log(rejection);
                }
            }
        }
    });
}]).