数据请求方式
- get,获取数据
- post,提交数据(表单提交以及文件上传)
- put,更新数据 (提交所有的数据)
- patch,提交数据 (提交修改的数据)
- delete,删除数据
1.get方法的使用
params
会出现在请求头中的querry string parameters
中,并且会出现在浏览器的地址栏中,即会拼接到url
中。有两种表达方式,代码如下:
// 第一种写法
axios({
method: 'get',
url: '',
params: {}
}).then(res => { do something })
// 第二种写法
axios.get(url, params).then(res => { do something })
2. post方法的使用(put和patch用法类似)
post
的请求头中会有一个content-type
,该字段有两个值,一个为form-data
,一般用于表单提交(文件上传,图片上传等等);另一个是application/json
即,传递的是json
数据。如果需要传递的是form-data
,那么我们需要先实例化一个FormData
,然后将data
指向form-data
即可。有两种表达方式,代码如下:
// 第一种
axios({
method: 'post',
url: '',
data: {}
}).then(res => { do something })
// 第二种
axios.post(url, data).then(res => { do something })
3. delete的使用方法
需要注意的是,config
的第三个字段可以为params
,这样参数会拼接在url
中,如果我们不想使之出现在url
中,我们只需要将params
替换为data
。代码如下:
axios({
method: 'delete',
url: '',
params: {}
}).then(res => { do something })
4. 并发请求
同时进行多个请求,并统一处理返回值,如果在某些场景中我们需要同时依赖两个接口返回的数据,那么我们可以使用并发请求。主要用于我们需要同时处理多个接口的返回值的使用场景。代码如下:
axios.all([ // 这里的参数是一个数组,里面包含了axios请求
axios.get('url1'), // 请求的先后顺序就是代码中的顺序
axios.get('url2')
]).then(
axios.spread((res1, res2) => { // spread用来分割返回值
console.log(res1, res2)
}
)
axios方法深入
1. 创建axios实例
有时我们后端的接口有很多,并且超时时长不一致,或者我们需要向不同的服务端去请求数据,这样我们就需要不同的axios实例去请求。代码如下:
// axios实例化
let api = axios.create({
baseURL: 'localhost:8080', // 请求的域名
timeout: 1000, // 设置请求的超时时长,超过时长报401超时
method: 'get,post',
headers: { // 设置请求头
token: ''
},
params: {},
data: {}
})
// 使用axios实例
api.get('/data.json')
2. axios配置
- 全局配置,例如
axios.defaults.timeout = 1000
- 实例配置, 在创建axios实例时传入的配置,如果不传实例配置就会使用全局配置
- 请求配置,在使用axios请求时,可以单独传入新的配置
这三种配置的优先级为:请求配置 > 实例配置 > 全局配置
3. axios拦截器
请求拦截器:
axios.interceptors.request.use(
config => {}, // 在发送请求前的一些处理逻辑
err => {} // 在请求错误后的处理
)
响应拦截器:
axios.interceptors.response.use(
res => { return res }, // 请求成功后对响应数据做一定的处理
err => { return Promis.reject(err)} // 在响应错误后的处理,可以用catch捕捉
)
4. axios错误处理
一般来说,如果我们在调用接口时请求错误或者响应错误,程序处理流程都会进入到catch
代码块中,例如:
axios.get('/data.json').then(callback).catch(err => {
console.log(err)
})
但是在实际开发中,我们对大多数接口都采用统一的错误处理,除了某些特殊的接口会采用catch
方法。
5. axios取消Http请求
取消请求一般发生在用户想查询某一商品或者某些信息,如果等待时间过长,用户可能会选择取消查询转而查询另一商品,这个时候上一个http
请求就无用了,这时候我们会去取消上一个请求,具体方法如下:
let api = axios.create({}) // 实例化axios
let source = axios.CancelToken.source() // 实例化一个source对象
api.get('/data.json', {
cancelToken: source.token // 请求时携带cancleToken
}).then(callback).catch(err => {
console.log(err)
})
source.cancel('message') // 调用source的cancel方法取消http请求,并将message以error
的形式返回,然后就取消了http请求,并进入到该请求的catch代码块,进行错误处理。