axios
-
Vue发送网络请求有非常多的方式,如何选择?
- 传统的Ajsx是基于XMLHttpRequest(XHR)
- 配置和调用方式非常混乱
- jQuery-Ajax
- 为了一个网络请求,引用jQuery,得不偿失
- Vue1.x,有个Vue-resource
- Vue2.0已经去掉,不会再更新
- 传统的Ajsx是基于XMLHttpRequest(XHR)
-
为什么axios
- 在浏览器中发送XMLHttpRequests请求
- 在node.js中发送http请求
- 支持Promise API
- 拦截请求和响应
- 转换请求和响应数据
-
axios请求方式
-
axios(config)
axios({ url: 'http://123.207.32.32:8000/home/multidata', method: 'get', //默认get请求 }).then((res)=>{ console.log(res) })
axios({ url: 'http://123.207.32.32:8000/home/multidata', method: 'get', //默认get请求 params: { //get请求的参数,不用放在url后面用?拼接了 type: 'pop', page: 1 } }).then((res)=>{ console.log(res) })
axios.request(config)
axios.get(url[, config])
axios.delete(url[,config])
axios.head(url[,config])
axios.post(url[, data [,config]])
axios.put(url[, data[, config]])
axios.patch(url[, data[,config]])
-
-
axios发送并发请求
axios.all([axios(), axios()]).then(results => {}) //可以将结果展开 axios.all([axios(), axios()]).then(axios.spread((res1, res2) => {}))
-
全局配置
//公共的配置 axios.defaults.baseUrl = "http://localhost:8080" axios.defaults.timeout = 5000 //超时时间5秒
-
常见的配置
- 请求地址:
url: '/user'
- 请求类型:
method: 'get'
- 根路径:
baseUrl: 'http://localhost:8080'
- 请求前的数据处理:
transformRequest: [function(data){}]
- 请求后的数据处理:
transformResponse: [function(data){}]
- 自定义请求头:
headers: {'x-Requested-With': 'XMLHttpRequest'}
- URL查询对象:
params: {id: 12}
- 查询对象序列化函数:
paramsSerializer: fucntion(params){}
- request body:
data:{key: 'aa'}
- 超时设置:
timeout: 10000
- 跨域是否带token:
withCredentials: false
- 自定义请求处理:
adapter: function(resolve, reject, config){}
- 身份验证信息:
auth: {uname: '', pwd: '1243'}
- 响应的数据格式:
responseType: 'json/blob/document/arraybuffer/text/stream'
- 请求地址:
-
axios实例
import axios from 'axios' const instance = axios.create({ bseURL: 'http://localhost:8080', timeout: 5000 }) //使用 instance({ url: '/user' }).then((res)=>{})
-
拦截器
const instance = axios.create({ baseURL: 'http://localhost:8080', timeout:5000 }) //拦截某个实例 //请求拦截 instance.interceptors.request.use(config=>{ console.log('请求成功拦截') return config }, err=>{ console.log('请求失败拦截') return err }) //响应拦截 instance.interceptors.response.use(response=>{ console.log('响应成功拦截') return response.data },err=>{ console.log('响应失败拦截') return err }) //如果要全局拦截,直接用axios.interceptors就可以