Угловая замена HttpClient для RequestOptions? - PullRequest
0 голосов
/ 10 июля 2019

Модуль Angular Http имел объект RequestOptions, который мог быть передан методу get (например, this.http.get(fooUrl, barOptions). RequestOptions содержал любые заголовки. Это устарело . «Ближайшая замена» устаревшего RequestOptions - HttpRequest .

Есть две проблемы с этим:
1. HttpRequest имеет параметр url, поэтому он НЕ эквивалентен RequestOptions. На самом деле, кажется, что он инкапсулирует весь запрос, но я не вижу, чтобы он использовался где-либо, поэтому я предполагаю, что это просто внутренний класс ..
2. HttpClient Метод get НЕ принимает HttpRequest в качестве аргумента.

Исходный код метода HttpClient get выглядит следующим образом:

/**
 * Constructs a `GET` request that interprets the body as an `ArrayBuffer` and returns the response in
 *  an `ArrayBuffer`.
 *
 * @param url     The endpoint URL.
 * @param options The HTTP options to send with the request.
 *
 * @return An `Observable` of the response, with the response body as an `ArrayBuffer`.
 */
get(url: string, options: {
    headers?: HttpHeaders | {
        [header: string]: string | string[];
    };
    observe?: 'body';
    params?: HttpParams | {
        [param: string]: string | string[];
    };
    reportProgress?: boolean;
    responseType: 'arraybuffer';
    withCredentials?: boolean;
}): Observable<ArrayBuffer>;

Есть ли какой-нибудь тип, который я могу использовать для параметра options сейчас? Должен ли я просто определить интерфейс с HttpHeaders ? Если для него нет типа, почему бы и нет?

Мой старый код выглядит так:

reqOptions.headers.set('Authorization', user.token);
reqOptions.headers.set('RefreshToken', user.refreshToken);

RequestOptions из старого Http модуля имел свойство headers и был статически напечатан.

P.S. Я прочитал ответ здесь, но он не использует тип: Angular4: Http -> HttpClient - requestOptions

Ответы [ 2 ]

0 голосов
/ 10 июля 2019

Вот кое-что, что я написал в качестве вспомогательной службы. Я уверен, что вы могли бы расширить для передачи любых явных заголовков.

export class ParamBuilderService {
  buildParams(queryParams: Params, excludedValues ? : Array < string > ): HttpParams {
    let params = new HttpParams();
    for (const key in queryParams) {
      if (queryParams.hasOwnProperty(key)) {
        const value = queryParams[key];
        if (excludedValues) {
          const containExcludedValue = excludedValues.indexOf(value) !== -1;
          if (!!value && !containExcludedValue) {
            params = params.append(key, value);
          }
        } else if (!!value || value === 0) {
          params = params.append(key, value);
        }
      }
    }
    return params;
  }
}
0 голосов
/ 10 июля 2019

На данный момент я только что определил «свой» RequestOptions интерфейс в новом файле в моем приложении под названием request-options.ts.Ниже приведено определение интерфейса, свойства были извлечены прямо из файла client.d.ts Angular Library, чтобы соответствовать тому, что HttpClient ожидает от параметра options для вызовов REST:

import { HttpHeaders, HttpParams } from '@angular/common/http';

export interface RequestOptions {
  headers?: HttpHeaders;
  params?: HttpParams;
}

Теперь я могу статическивведите RequestOptions еще раз, например:

const requestOptions: RequestOptions = {
  params: new HttpParams()
};

(Выше приведен пример кода, поднятого здесь: Angular4: Http -> HttpClient - requestOptions )

Я не уверенесли я что-то упустил полностью или мне нужно сделать пиар против углового репоЭто кажется довольно очевидным упущением, если для этого нет причины.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...