介绍
首先需要知道:axios不是一种新的技术。
axios 是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端,本质上也是对原生XHR的封装,只不过它是Promise的实现版本,符合最新的ES规范,有以下特点:
- 从浏览器中创建 XMLHttpRequests
- 从 node.js 创建 http 请求
- 支持 Promise API
- 拦截请求和响应
- 转换请求数据和响应数据
- 取消请求
- 自动转换 JSON 数据
- 客户端支持防御 XSRF
安装
npm 安装
$ npm install axios
bower 安装
$ bower install axios
使用 CDN
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
axios 基本使用
main.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| import axios from 'axios'
axios({ url: 'http://139.198.169.201/json/index.json', method: 'get' }).then(res => { console.log(res);
}).catch(err => { console.log('请求失败'); })
axios.get()
axios.post()
|
axios请求方法
axios(config)
axios.request(config)
axios.get(url[,config])
axios.post(url[,config])
axios.delete(url[,config])
axios.head(url[,config])
axios.put(url[,data[,config]])
axios.patch(url[,data[,config]])
axios发生并发请求
使用 axios.all
可以放入多个请求的数组
axios.all([])
返回结果是一个数组,使用 axios.spread
可将数组 [res1,res2] 展开为 res1,res2
1 2 3 4 5 6 7 8 9 10 11 12
| axios.all([axios({ url: 'http://123.207.32.32:8000/home/multidata' }),axios({ url: 'http://123.207.32.32:8000/home/data', params: { type: 'sell', page: 5 } })]) .then(res =>{ })
|
1 2 3 4 5 6 7 8 9 10 11 12
| .then(axios.spread((res1, res2) => { console.log(res1); console.log(res2); }))
})]) .then(([res1, res2]) => { console.log(res1); console.log(res2); })
|
全局配置
在全局设置默认配置
1 2 3 4 5 6 7 8 9
| axios.defaults.baseURL = 'http://123.207.32.32:8000' axios.defaults.timeout = 5000 axios.get({ url: '/home/data', params: { type: 'sell', page: 5 } })
|
Axios 实例
创建 axios 实例来应变不同的服务器请求数据
1 2 3 4 5 6 7 8 9
| const instance1 = axios.create({ baseURL: 'http://123.207.32.32:8000', timeout: 5000 }) instance1({ url: '/home/multdata' }).then(res =>{ console.log(res) })
|
Axios 封装
为了让代码更具时代性,不要直接在组件中引用,而是创建一个文件夹去引用文件
src/netWork/request.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
|
import axios from 'axios'
export function request(config, success, failure) { const instance = axios.create({ baseURL: 'http://123.207.32.32:8000', timeout: 5000 }) instance(config) .then(res => { success(res) }) .catch(err => { failure(err) }) }
export function request(config) { const instance = axios.create({ baseURL: 'http://123.207.32.32:8000', timeout: 5000 })
instance(config.baseConfig) .then(res => { config.success(res) }) .catch(err => { config.failure(err) }) }
export function request(config) { return new Promise((resolve, reject) => { const instance = axios.create({ baseURL: 'http://123.207.32.32:8000', timeout: 5000 }) instance(config) .then(res => { resolve(res) }) .catch(err => { reject(err) }) }) }
export function request(config) { const instance = axios.create({ baseURL: 'http://123.207.32.32:8000', timeout: 5000 }) return instance(config)
}
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| import { request } from '@/netWork/request'
request({ url: '/home/multidata', method: 'get' }, res => {console.log(res)} , err => {console.log(err)})
request({ baseConfig: { url: '/home/multidata' }, success: function(res) { console.log(res) }, failure: function(err) { console.log(err); } })
request({ url: '/home/multidata' }).then(res => { console.log(res); }).catch(err => { console.log(err); })
|
Axios 拦截器的使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| export function request(config) { const instance = axios.create({ baseURL: 'http://123.207.32.32:8000', timeout: 5000 }) instance.interceptors.request.use(config =>{ },err =>{ }) return instance(config)
}
|