angular - 如何设置{观察: 'response' } option globally in Angular 4. 3+?

标签 angular response interceptor

第一个想法是使用HttpInterceptor 但是clone(...) 方法的签名不包含observe 选项.除了为每个请求定义 { observe: 'response' } 选项外,我还没有看到替代方案 yet ...

那么,如果有的话,是否有方法来设置 { observe: 'response' } 选项 globally,例如通过 HttpInterceptor?

clone(update: {
   headers?: HttpHeaders;
   reportProgress?: boolean;
   params?: HttpParams;
   responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';
   withCredentials?: boolean;
   body?: T | null;
   method?: string;
   url?: string;
   setHeaders?: {
       [name: string]: string | string[];
   };
   setParams?: {
       [param: string]: string;
   };
}): HttpRequest<T>;

最佳答案

我知道这个问题很老但是很有趣。

我考虑过重写 httpClient 方法。

您只需重写一次方法。 所有的工作都将完成。

例如 GET 方法是这样的:

  overrideGetRequest() {
    const httpRequest = this.http.get.bind(this.http);

    this.http.get = function get<T = any>(url: string, options?: any): Observable<T> {
      let requestOptions = options || {};
      if(!('observe' in requestOptions)) {
      requestOptions = { ...requestOptions, observe: "response" };
      }
      return httpRequest(url, requestOptions);
    };
  }

这是 Stackblitz 示例,我在其中覆盖了 httpClient 的 POST 和 GET 方法。

https://stackblitz.com/edit/angular-interceptors-kknew1?file=app%2Fapp.component.ts

关于angular - 如何设置{观察: 'response' } option globally in Angular 4. 3+?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48543244/

相关文章:

python - 将图像作为 JSON 传递或在 http 响应中组合两种内容类型

error-handling - 无法处理Django-rest-framework上的响应错误

node.js - Express 中间件的 ENOENT : no such file or directory, stat 错误

javascript - 拦截DOM和JS引擎调用

javascript - 我可以使用 JavaScript 开发 Angular 5 应用程序吗?

angular - 如何在我的 Angular 2 应用程序中保持对话框的状态和进度?

Angular2,错误 : Expression has changed after it was checked. 先前值 : 'undefined' . 当前值:'0

angularjs - Firebase 使用 Angular2 通过 Firebase 数据库(Firebase 存储)上传文件、图像

c# - CaSTLe Windsor 拦截器和按约定注册

java - Hibernate JPA 拦截器没有得到调用