【问题标题】:Angular 2 (Ionic 2): intercept ajax requestsAngular 2 (Ionic 2):拦截 ajax 请求
【发布时间】:2016-06-18 13:38:42
【问题描述】:

使用 Angular 1.x 可以使用以下代码拦截所有 ajax 请求:

$httpProvider.interceptors.push('interceptRequests');
...
var app_services = angular.module('app.services', []);
   app_services.factory('interceptRequests', [function () {
   var authInterceptorServiceFactory = {};
   var _request = function (config) {
   //do something here
   };
   var _responseError = function (rejection) {
   //do something here
   }
   authInterceptorServiceFactory.request = _request;
   authInterceptorServiceFactory.responseError = _responseError;
   return authInterceptorServiceFactory;
}]);

Angular 2 中是否有类似的(或开箱即用的)功能?

【问题讨论】:

    标签: javascript angularjs ionic-framework angular ionic2


    【解决方案1】:

    一种方法可能是扩展HTTP 对象以拦截调用:

    @Injectable()
    export class CustomHttp extends Http {
    
      request(url: string | Request, options?: RequestOptionsArgs): Observable<Response> {
        console.log('request...');
        return super.request(url, options).catch(res => {
          // do something
        });        
      }
    
      get(url: string, options?: RequestOptionsArgs): Observable<Response> {
        console.log('get...');
        return super.get(url, options).catch(res => {
          // do something
        });
      }
    }
    

    并按如下所述进行注册:

    bootstrap(AppComponent, [HTTP_PROVIDERS,
        new Provider(Http, {
          useFactory: (backend: XHRBackend, defaultOptions: RequestOptions) => new CustomHttp(backend, defaultOptions),
          deps: [XHRBackend, RequestOptions]
      })
    ]);
    

    您可以利用例如catch 运算符来捕获错误并在全局范围内处理它们...

    看到这个 plunkr:https://plnkr.co/edit/ukcJRuZ7QKlV73jiUDd1?p=preview

    【讨论】:

    • 这似乎是一个很好的实现。我尝试过,但是在使用 CustomHttp 中的 get() 方法时出现此错误: ORIGINAL EXCEPTION: TypeError: _get(...).call(...).catch is not a function
    • @Chris 您需要像这样导入catch 运算符:import 'rxjs/add/operator/catch
    • 现在这段代码工作了(并从 CustomHttp 中删除了构造函数)。但现在我有其他错误: ORIGINAL EXCEPTION: TypeError: Cannot read property 'build' of undefined in the line that contains function XHRConnection(req, browserXHR, baseResponseOptions) { ... var _xhr = browserXHR.build();
    猜你喜欢
    • 2016-11-12
    • 2016-06-01
    • 2013-05-24
    • 1970-01-01
    • 2015-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-05
    相关资源
    最近更新 更多