如何在不注入的情况下使用或替换Angular的HttpClient

时间:2019-10-18 22:52:31

标签: angular typescript httpclient angular-httpclient

我在Angular 8中构建了一个UI,该UI与使用Angular的HttpClient在服务中实现的第三方API进行了许多复杂的交互。

现在,我正在尝试使用第三方API将服务代码移至npm模块,以便可以由Node / Typescript后端共享。除了此HttpClient依赖项之外,此后端不需要Angular。但是,我需要使该共享API库与Angular UI向后兼容。

我有两种选择,并且在以下任一方面寻求帮助和建议:

  1. 继续使用Angular的HttpClient,但找到一种使其不使用注入功能的方法。我知道您可以引导它进行注入,但是我不知道如何从外部访问这些服务类实例。此选项的好处不影响使用API​​服务的Angular UI项目。

  2. 使用另一个支持Typescript的http客户端。请注意,除了对API服务的明显重写之外,这里最大的警告是,如果它不支持RXJS Observerables,则可能会影响使用当前Angular UI中的API的许多当前应用程序代码。也就是说,有什么好的替代品建议吗?

我喜欢'request'的功能,并且有types,但是我找不到任何有关如何使用这些类型的文档。如果没有Typescript类中的Types,它可以很好地运行,但是担心这样做将需要对Angular UI的使用进行最大程度的重写,以期望获得Observables和HttpClient的行为,例如错误处理。

更新:我会节省每个人的时间,总结我决定要做的事情...

Angular的HttpClient只能在浏览器中运行,而不能在Node上运行,因为它使用XMLHttpRequest。我正在尝试“ axios”,它可以在Node和浏览器中运行。但是,由于我有太多业务逻辑依赖于Angular Http客户端界面和行为,并且如果axios引入了新问题,我担心我可能会后退一步,所以我决定使用一个界面对其进行泛化,以便浏览器UI代码可以选择哪个客户端它想要使用,以及为添加其他http客户端(例如superagent)打开大门。

虽然axios返回Promises,并且HttpClient返回可观察对象(我想保留用于.map之类的功能),但我发现您可以轻松地通过以下方式将promise转换为可观察对象:

从'rxjs'导入{可观察,来自}; const observable = from(promise);

0 个答案:

没有答案