axios是一个基于Promise的HTTP库,可以用于浏览器和Node.js中发送数据请求。axios具有以下特点:
- 支持浏览器和Node.js
- 支持Promise API
- 支持拦截请求和响应
- 支持转换请求和响应数据
- 支持取消请求
- 支持自动转换JSON数据
- 支持客户端防御XSRF
axios的基本用法
要使用axios,首先需要安装它:
npm install axios
然后在代码中引入它:
import axios from 'axios'
或者使用script标签引入它:
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
接下来,就可以使用axios发送各种类型的请求,例如:
// 发送GET请求
axios.get('/user?ID=12345')
.then(function (response) {
// 处理成功的响应
console.log(response);
})
.catch(function (error) {
// 处理错误的响应
console.log(error);
});
// 发送POST请求
axios.post('/user', {
firstName: 'Fred',
lastName: 'Flintstone'
})
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});
// 发送多个并发请求
axios.all([
axios.get('/user/12345'),
axios.get('/user/67890')
])
.then(axios.spread(function (user1, user2) {
// 处理两个响应
console.log(user1.data);
console.log(user2.data);
}));
axios的配置选项
axios可以通过传递一个配置对象来自定义请求,例如:
// 使用给定的配置发送请求
axios({
method: 'post',
url: '/user/12345',
data: {
firstName: 'Fred',
lastName: 'Flintstone'
},
headers: {
'Content-Type': 'application/json'
},
timeout: 1000,
responseType: 'json'
})
.then(function (response) {
console.log(response);
})
.catch(function (error) {
console.log(error);
});
配置对象的属性有:
-
url
:请求的地址,必须指定 -
method
:请求的方法,可选,默认为
get
-
baseURL
:请求的基础地址,如果
url
不是绝对地址,会拼接在其前面 -
params
:请求的查询参数,会自动转换为URL字符串并添加到
url
后面 -
data
:请求的主体数据,只适用于
put
、
post
、
patch
等方法,会自动转换为JSON字符串(除非指定了其他
transformRequest
) -
headers
:请求的头部信息,可以设置通用的或者特定方法的头部 -
timeout
:请求的超时时间,单位毫秒 -
withCredentials
:是否携带cookie信息,可选,默认为
false
-
responseType
:响应的数据类型,可选,默认为
json
-
transformRequest
:请求数据转换函数或函数数组,在发送请求之前对数据进行修改,返回修改后的数据或Promise对象 -
transformResponse
:响应数据转换函数或函数数组,在接收响应之后对数据进行修改,返回修改后的数据或Promise对象 -
cancelToken
:取消请求的令牌,可以使用
CancelToken.source.factory
方法创建一个取消令牌源,并通过其
token
属性获取令牌,然后通过其
cancel
方法取消请求
axios的拦截器
axios可以通过拦截器来在请求或响应被发送或处理之前进行一些操作,例如:
// 添加一个请求拦截器,在发送请求之前做一些事情
axios.interceptors.request.use(function (config) {
// 比如在config中添加一个token字段
config.token = 'some token';
return config;
}, function (error) {
// 处理请求错误
return Promise.reject(error);
});
// 添加一个响应拦截器,在接收响应之后做一些事情
axios.interceptors.response.use(function (response) {
// 比如在response中添加一个status字段
response.status = 'success';
return response;
}, function (error) {
// 处理响应错误
return Promise.reject(error);
});
axios的封装
为了方便使用和管理axios,我们可以对其进行一些封装,例如:
// 创建一个axios实例,并设置一些默认配置
const instance = axios.create({
baseURL: 'https://some-domain.com/api/',
timeout: 1000,
});
// 封装一个通用的request函数,接收一个options对象作为参数,并返回一个Promise对象
function request(options) {
return new Promise((resolve, reject) => {
// 使用instance发送请求,并处理成功或失败的结果
instance(options)
.then(response => {
resolve(response.data);
})
.catch(error => {
reject(error);
});
});
}
// 封装一些具体的API函数,根据不同的业务需求调用request函数,并传递相应的配置参数
// 获取用户列表
function getUserList() {
return request({
url: '/users',
method: 'get',
});
}
// 添加用户
function addUser(data) {
return request({
url: '/users',
method: 'post',
data,
});
}
// 删除用户
function deleteUser(id) {
return request({
url: `/users/${id}`,
method: 'delete',
});
}
// 导出API函数供其他模块使用
export { getUserList, addUser, deleteUser };
以上就是我关于axios的使用方法和封装的文章,希望对你有帮助。
版权声明:本文为2301_76635548原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。