我通过使用访存来调用Web服务,但是我可以在axios的帮助下进行相同的操作。所以现在我很困惑。我应该选择axios还是fetch?
我通过使用访存来调用Web服务,但是我可以在axios的帮助下进行相同的操作。所以现在我很困惑。我应该选择axios还是fetch?
Answers:
Fetch和Axios在功能上非常相似,但是为了实现向后兼容性,Axios似乎工作得更好(例如,在IE 11中,fetch无法正常工作,请查看此文章)
另外,如果您使用JSON请求,则以下是我偶然发现的一些区别。
提取JSON发布请求
let url = 'https://someurl.com';
let options = {
method: 'POST',
mode: 'cors',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json;charset=UTF-8'
},
body: JSON.stringify({
property_one: value_one,
property_two: value_two
})
};
let response = await fetch(url, options);
let responseOK = response && response.ok;
if (responseOK) {
let data = await response.json();
// do something with data
}
Axios JSON发布请求
let url = 'https://someurl.com';
let options = {
method: 'POST',
url: url,
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json;charset=UTF-8'
},
data: {
property_one: value_one,
property_two: value_two
}
};
let response = await axios(options);
let responseOK = response && response.status === 200 && response.statusText === 'OK';
if (responseOK) {
let data = await response.data;
// do something with data
}
所以:
希望这可以帮助。
Axios request is ok when status is 200 and statusText is 'OK'
那么2xx范围内的其他httpStatus(例如201或204)呢?
它们是HTTP请求库...
我最终还是有同样的疑问,但是这篇文章中的表格使我同意isomorphic-fetch
。这是fetch
但随着工作的NodeJS。
http://andrewhfarmer.com/ajax-libraries/
上面的链接失效了。这张表在这里:https : //www.javascriptstuff.com/ajax-libraries/
fetch
为本地(这意味着你可以只使用它-无需包括图书馆,因此表中源),而实际上fetch
是不是在某些平台上实现的(尤其是在IE浏览器的所有版本),而您需要提供无论如何,外部polyfill。
timeout
(这很奇怪),我们必须使用单独的模块来实现此基本功能。
根据GitHub上的mzabriskie :
总体而言,它们非常相似。axios的一些优点:
变形器:允许在发出请求之前或接收到响应之后对数据执行转换
拦截器:允许您完全更改请求或响应(也包括标题)。另外,在发出请求或Promise解决之前执行异步操作
内置XSRF保护
请检查浏览器支持Axios
我认为您应该使用axios。
提取API和axios API之间的另一大区别
另外...我在测试中玩各种库,并注意到它们对4xx请求的不同处理。在这种情况下,我的测试将返回一个响应为400的json对象。这是3个流行的lib处理响应的方式:
// 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
在node-fetch
没有响应时引发4xx响应。还fetch
对JSON解析使用了Promise。
.throws
测试抛出的错误的方法。在这种情况下,我正在测试来自所有3个库的拒绝,并注意到返回的数据有所不同。
axios的优点: