在Angular中使用`fetch`

10

使用原生的Fetch API而不是在Angular中使用HttpClient,是否存在任何特定的技术缺陷?我对Angular相对较新,不确定这种绕过提供的接口的方式是否安全。(例如,直接通过访问document来修改DOM是不可取的,根据文档。)

我正在使用Angular 6,我不担心不支持fetch的客户端。


1
你可以放心使用它。 - brk
1
@黄雨伞 - 我进行了一些小的编辑,试图使问题不基于观点。但是如果您不同意这个编辑,请随意回滚。 (请注意,该问题可能会因基于观点而关闭。) - T.J. Crowder
1
此外,我认为如果你在使用 Angular 6 并启用了 polyfill,Angular 将会为 fetch 生成 polyfill。 - brk
@T.J.Crowder 谢谢。我进行了另一次编辑以澄清我的想法。 - 黄雨伞
使用fetch处理错误比较繁琐,需要额外的努力。请参考此文章以做出更明智的决策,https://css-tricks.com/using-fetch/。 - S. Patel
2个回答

17
Angular是一种“有主见”的框架,这意味着框架希望您按照Angular的方式进行操作。但这并不意味着您必须按照它们的方式做事。
可以自由地使用fetch()httpClient。它们是解决同样问题的两种不同方法,您应该根据需求上下文选择其中一种。
使用fetch()将返回一个Promise。而使用Angular的httpClient将返回Observable,它具有Promises没有的特性。您可以使用Observable.toPromise()将其转换,但那么为什么要使用Observable呢?
以下是Angular希望您使用httpClient的原因:

HttpClient的其他好处包括可测试性特征、请求和响应对象的类型化、请求和响应拦截、Observable API以及简化的错误处理。


-1
如其他答案所述,HttpClient库具有额外的好处,并且根据下面的链接所述,它还可以通过考虑一些方法来帮助预防XSSI攻击:
Angular的HttpClient库识别这种约定并自动从所有响应中剥离字符串")]}',\n",然后再进行进一步解析。 Angular安全-XSSI

1
-1 是因为这种去除操作只是一种惯例,用于防止在非常老的浏览器中进行解析。只有在您的 JSON 响应中明确包含该字符串时才适用... 在这种情况下,您可以轻松地使用 fetch 并在某个 API 调用层中自行删除该字符串。 - David Mulder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接