Как использовать или заменить HttpClient Angular без инъекций - PullRequest
0 голосов
/ 19 октября 2019

Я создал пользовательский интерфейс в Angular 8, который имеет множество сложных взаимодействий со сторонним API, реализованным в сервисах, использующих HttpClient от Angular.

Теперь я пытаюсь переместить код сервисов с помощью стороннего API в модуль npm, чтобы его можно было использовать для бэкэнда Node / Typescript. Этот сервер не нуждается в Angular, кроме этой зависимости HttpClient. Но мне нужно, чтобы эта общая библиотека API поддерживала обратную совместимость с Angular UI.

У меня есть два варианта, и я прошу помощи и совета по любому из них:

  1. Продолжайте использовать Angular's HttpClient , но найдите способ сделатьэто работает без инъекций. Я знаю, что вы можете загрузить его, чтобы выполнить инъекцию, но тогда я понятия не имею, как получить доступ к этим экземплярам класса обслуживания извне. Преимущество этой опции не влияет на проект Angular UI, использующий сервисы API.

  2. Используйте другой http-клиент, который поддерживает Typescript. Обратите внимание, что самое большое предостережение здесь, помимо очевидного переписывания сервисов API, заключается в том, что если он не поддерживает Обозреватели RXJS, то это может повлиять на большую часть текущего кода приложения, потребляющего API в текущем пользовательском интерфейсе Angular. Тем не менее, какие-либо рекомендации по хорошей замене?

Мне нравятся функции ' request ', и для него есть типов , но я не могу найти документацию о том, какиспользовать типы. Он прекрасно работает без типов в классах Typescript, но обеспокоен тем, что для этого потребуется большая часть переписывания использования пользовательского интерфейса Angular, ожидающего Observables и поведения HttpClient, таких как обработка ошибок.

ОБНОВЛЕНИЕ: я сэкономлю каждому время и подведу итог тому, что я решил сделать ...

HttpClient от Angular может работать только в браузере, а не в Node, потому что он использует XMLHttpRequest. Я пытаюсь «axios», который может работать как в Node, так и в браузере. Но, поскольку у меня так много бизнес-логики, зависящей от интерфейса и поведения клиента Angular Http, и я боюсь, что могу сделать шаг назад, если в Axios появятся новые проблемы, я решил обобщить ее с помощью интерфейса, чтобы код пользовательского интерфейса браузера мог выбрать, какой клиентон хочет использовать, а также открыть дверь для добавления других http-клиентов в будущем, таких как superagent.

Хотя axios возвращает Promises, а HttpClient возвращает наблюдаемые (функция, которую я хотел сохранить для таких вещей, как .map), я обнаружил, что вы можете легко преобразовать обещания в наблюдаемые с помощью:

import {Observable,из} из 'rxjs';const observable = от (обещание);

...