angular4 关于拦截器的问题

大白two
  • 166

最近非常头痛的一件事,就是拦截器。

  1. 拦截器是要用HttpClientModule,才能玩转的。但是!!!我的项目用的是HttpModule来做请求的。一个是constructor(protected http: HttpClient,) {}, 一个是constructor(protected http: Http,) {}
    项目都开始上线使用了,还比较大,想改已经很麻烦了。

现在的http请求封装和调用是这样的:
http.service.ts

  /**
   * 使用POST方法对指定URL发送指定的参数
   *
   * @param url
   * @param criteria 发送的参数对象
   */
  postWithCriteria(url, criteria) {
    // 这里应该要有一个判断条件的:判断当前的url是不是需要token,比如:login...
    return this.http.post(url, this.encode(criteria || {})).map(r => {
      const tmp = r.json();
      console.log('响应:', tmp);
      if (typeof tmp.data === 'string') {
        tmp.data = JSON.parse(tmp.data);
      }
      return tmp;
    });
  }

  /**
   * @param url 网址
   * @param criteria 请求参数
   * @param cls 响应类
   * */
  post(url, criteria = null, cls = null) {
    return this.postWithCriteria(url, criteria || {}).map((data: ResponseMessageModel) => {
      if (data.resultType && cls) {
        if (Array.isArray(data.data)) {
          data.data = data.data.map(item => {
            return new cls(item);
          });
        } else if (Array.isArray(data.data.Rows)) {
          data.data.Rows = data.data.Rows.map(item => {
            return new cls(item);
          });
        } else if (typeof(data.data) === 'object') {
          data.data = new cls(data.data);
        }
      }

      this.timeManagerService.setTimestamp(data.timeStamp);
      return data;
    });
  }

一般调用是这样的:

  /**
   * 从服务器获取错误码
   * */
  loadError() {
    this.httpService.post(environment.url.getErrors, {
      clientType: 'OperationMgt',
      errorType: 'InputError'
    }).subscribe(
      data => {
        if (data.resultType) {
          this.errorService.errors = data.data;
        } else {
          this.errorService.handlePopupErrors(data.error);
        }
      }
    );
  }

就想问一下各位大佬:

a. 有没有办法能正常将Http的使用改成HttpClient的,按照官方文档的来走,直接在一般调用的地方就会报很多错,甚至subscribe这个都用不了。
b. 或者,还有没有别的办法可以实现类似于拦截器的功能,目前就是想拦截获取到400,502等以及超时的请求问题。

回复
阅读 1.1k
1 个回答
✓ 已被采纳

这个没办法,升级到Angular5.0以上之后Http就被标记为过时,没法用了,所以你还是尽快把Http全部换成HttpClient,报错是好事,你很容易知道哪些地方需要修改,改动一般都很小,很容易改。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
你知道吗?

宣传栏