angular4 关于拦截器的问题

发布于 2022-09-11 19:36:37 字数 2108 浏览 24 评论 0

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

  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等以及超时的请求问题。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

强辩 2022-09-18 19:36:37

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文