Определите подходящий метод HTTP в повторно используемой функции для запросов API, используя HTTPClient Angular. - PullRequest
0 голосов
/ 03 апреля 2020

Я хочу реализовать повторно используемый сервис для отправки запросов в мой API.

Прямо сейчас у меня все работает как задумано, но только для GET запросов.

Вот функция:

  makeAPIRequest = ({ ...opts }) => {
    return this.http.get(opts.url, opts.params)
      .toPromise()
      .then(response => response)
      .catch(err => this.handleError(err));
  };

И вот пример того, как она используется:

  getCustomer(id): Promise<Customer> {
    return this.APIService.makeAPIRequest({
      url: this.customerEditUrl(id)
    }) as Promise<Customer>;
  }

Я хочу расширить функциональность, чтобы я мог передать метод HTTP в opts, но я не уверен, как это сделать чисто. Я бы хотел избежать использования больших условных выражений и повторений - было бы неплохо подойти к этому кратко. Например, если я передам opts, который будет выглядеть следующим образом:

 { url: this.customerEditUrl(id), params, httpMethod: 'POST' }

Как мне сделать так, чтобы моя makeAPIRequest функция выглядела так?

  makeAPIRequest = ({ ...opts }) => {
    return this.http.post(opts.url, opts.params)
      .toPromise()
      .then(response => response)
      .catch(err => this.handleError(err));
  };

Заранее спасибо!

1 Ответ

0 голосов
/ 03 апреля 2020

Вместо использования this.http.post() вы можете вручную создать новый запрос. Конструктор запроса позволяет указать метод в виде строки.

Посмотрите: https://angular.io/api/common/http/HttpClient#request

Одна из перегрузок конструктора для this.http.request(...) выглядит следующим образом:

request(method: string, url: string, options: { body?: any; headers?: HttpHeaders | { [header: string]: string | string[]; }; observe?: "body"; params?: HttpParams | { [param: string]: string | string[]; }; reportProgress?: boolean; responseType: "blob"; withCredentials?: boolean; }): Observable<Blob>

Как видите, первый параметр - это HTTP-метод в виде строки. Остальные должны быть вам относительно знакомы.

this.http.request(opts.httpMethod, opts.url, opts.params)

должен сделать свое дело;)


Я также предлагаю вам взглянуть на использование observable напрямую, а не на преобразование возвращаемых наблюдаемых к обещанию.

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