Axios 是一个基于 Promise 的 HTTP 客户端,用于浏览器和 node.js。它可以执行多种复杂的请求操作。以下是一些使用 Axios 实现的常见请求场景的示例。
请求共享
请求共享通常指的是确保对于相同的请求,在一定时间内只发送一次,如果有多个地方同时发起相同的请求,后续的请求会等待第一个请求完成后共享结果。这通常可以通过创建一个请求缓存或者使用请求锁来实现。
javascript
const axios = require('axios');
const requestCache = {};
function sharedRequest(url) {
if (requestCache[url]) {
return requestCache[url];
}
const promise = axios.get(url).then(response => {
delete requestCache[url];
return response;
}).catch(error => {
delete requestCache[url];
throw error;
});
requestCache[url] = promise;
return promise;
}
// 使用
sharedRequest('https://api.example.com/data')
.then(response => {
console.log(response.data);
})
.catch(error => {
console.error(error);
});
分页请求
分页请求通常用于处理大量数据,这里是一个简单的递归函数,用于处理分页逻辑:
javascript
async function fetchPages(url, page = 1, results = []) {
const response = await axios.get(url, { params: { page } });
const data = response.data;
results = [...results, ...data.items];
if (data.nextPage) {
return fetchPages(url, page + 1, results);
} else {
return results;
}
}
// 使用
fetchPages('https://api.example.com/items')
.then(allItems => {
console.log('All items:', allItems);
})
.catch(error => {
console.error(error);
});
表单提交
表单数据通常以 application/x-www-form-urlencoded
或 multipart/form-data
格式发送。以下示例展示了如何提交表单数据:
javascript
const axios = require('axios');
const qs = require('qs'); // 使用 qs 库来序列化数据
const formData = {
username: 'example',
password: 's3cret'
};
axios.post('https://api.example.com/login', qs.stringify(formData), {
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
})
.then(response => {
console.log(response.data);
})
.catch(error => {
console.error(error);
});