我使用Fetch调用web服务,但我可以在Axios的帮助下做同样的事情。现在我很困惑。我应该选择Axios还是Fetch?


当前回答

对于fetch,我们需要处理两个承诺。使用axios,我们可以直接访问响应对象数据属性中的JSON结果。

其他回答

除了……我在测试中使用了各种lib,并注意到它们对4xx请求的不同处理。在这种情况下,我的测试返回一个json对象,响应为400。这是3个流行的libs处理响应的方式:

// request-promise-native
const body = request({ url: url, json: true })
const res = await t.throws(body);
console.log(res.error)


// node-fetch
const body = await fetch(url)
console.log(await body.json())


// Axios
const body = axios.get(url)
const res = await t.throws(body);
console.log(res.response.data)

有趣的是,request-promise-native和axios在4xx响应上抛出,而节点获取则不会抛出。fetch还使用了json解析的promise。

Axios是一个独立的第三方包,可以使用NPM轻松安装到React项目中。

你提到的另一个选项是fetch函数。与Axios不同,fetch()内置于大多数现代浏览器中。使用fetch,您不需要安装第三方包。

所以这取决于你,你可以使用fetch(),如果你不知道你在做什么,可能会搞砸,或者只是使用Axios,在我看来更直接。

它们是HTTP请求库…

我最终也产生了同样的怀疑,但这篇文章中的表格让我选择了同构取回。它是fetch,但适用于NodeJS。

http://andrewhfarmer.com/ajax-libraries/


上面的链接失效了 同样的表格在这里:https://www.javascriptstuff.com/ajax-libraries/

或者在这里:

Axios是一个基于承诺的HTTP客户端库,而Fetch是一个用于发出API请求的javascript API。

主要区别是浏览器支持:Axios支持包括IE在内的所有浏览器,而Fetch只支持最新的浏览器,IE不支持。

参考链接:https://github.com/axios/axios浏览器支持

https://caniuse.com/fetch

与获取API相比,Axios具有更好的错误处理。Axios可以抛出400到500个范围的状态代码错误,而在fetch API中,您需要手动处理这些错误。 更多信息请访问:https://bariablogger.in/f/axios-vs-fetch-react

axios的好处:

变形:允许在发出请求之前或在收到响应之后对数据进行转换 拦截器:允许您完全更改请求或响应(包括头)。也执行异步操作之前提出请求或承诺解决之前 内置XSRF保护

axios相对于fetch的优点