官方文档:http://www.axios-js.com/zh-cn/docs/
Axios是基于Promise的HTTP库,可以用在浏览器和node.js中;
安装: npm install axios
cdn: <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
## axios: 最核心技术点是 如何拦截请求响应并修改请求参数和响应数据 和 axios是如何使用promise搭起来基于xhr的异步桥梁的
一、特性:
1:从浏览器中创建XMLHttpRequest
2:从node.js创建http请求
3:支持 Promise API
4:拦截请求和响应
5:转换请求数据和响应数据
6:取消请求
7:自动转换JSON数据
8:客户端支持防御XSRF
二、发送请求
1:发送get请求 // 为给定的ID的user创建请求 axios.get('/user/ID=12345') .then(res => { console.log(res)}) .catch(err => { console.log(err) }) // 也可以这样 axios.get('/user', { params: { ID: 12345} }) // config书写params参数 2:发送post请求 axios.post('/user', { key: value }) 3:执行多个并发请求 助手函数 axios.all() 和 axios.spread(callback) function One() { return axios.get('/user/12345') } function Two() { return axios.get('/user/12345/permissions') axios.all([One(), Two()]) .then(res => { axios.spread( (acct, perms) => { // 两个请求现在都执行完成})} // 并发 请求都执行成功后 的回调函数 是 axios.spread()
三、axios 的API
可以通过向axios传递相关配置来创建 axios(config) //发送post请求 axios({ method: 'post', url: '/user', data: { key: value } }) // 发送get请求 axios({ method: 'get', url: 'user/ID=12345', params: { ID: 12345} // 或者这样传递数据 })
// 发送get请求的默认方法 axios('/user/12345')
四、请求方法的别名
axios.reques(config) axios.get(config) axios.delete(config) axios.post(config)
五、创建实例 axios.create(config)
const instance = axios.create({ baseURL: 'https://baidu.com/api', timeout: 2000, headers: {} })
六、配置优先级
配置项通过一定的规则合并,request config > instance.defaults > 系统默认 优先级高的覆盖低优先级
// 创建一个实例,这时的超时时间为系统默认的0 const instance = axios.create() // 通过instance.defaults重新设置超时时间, 比系统默认级别高 instance.defaults.timeout = 2500 //通过request.config重新设置超时时间, 优先级最高 instance.get('/user', { timeout: 1000 })
七、拦截器
可以在then和catch之前拦截请求和响应
// 添加一个请求拦截器 axios.interceptors.request.use( config => { // Do something before requests is sent return config }, error => { // Do something with request error return Promise.reject(error) }) // 添加一个响应拦截器 axios.interceptors.response.use( config => { // Do something with response data return response }, error => { // Do something with response error return Promise.reject(error) }) // 移除拦截器 var myInterceptor = axios.interceptors.request.use(() => {}) axios.interceptors.request.eject(myInterceptor)
八、取消请求
使用concel token取消请求 API
const CancelToken = axios.CancelToken; const source = CancelToken.source(); axios.get('/user/12345', { cancelToken: source.token }).catch(function(thrown){ if (axios.isCancel(thrown)) { console.log('request conceled', thrown.message) } else { // 错误处理 } }) axios.post('/user/12345', { name: 'new name' }, { cancelToken: source.token }) // 取消请求 message参数可选 source.cancel('message') // 二、 也可以通过传递一个executor函数到CancelToken的构造函数来创建cancel token const CancelToken = axios.CancelToken; let cancel; axios.get('/user/12345', { concelToken: new CancelToken(function executor(c) { // executor函数接受一个cancel函数作为参数 cancel = c }) }) // 取消请求 cancel()
// 可以使用同一个cancel token 取消多个请求