Axios 的请求方式
1:get请求
axios.get(url[,config])
axios.get('/list?articel=0')
.then(function(resolve){
})
.catch(function(error){
})
axios.get('/list',{
params:{
articel: 0
}
}) .then(resolve => { })
.catch( error => {})
2: post请求
axios.post(url[,data[,config]])
Axios.post('/list',{
Articel:2
}).then(resolve => { })
.catch( error => {})
3: axios.request(config)
4:axios.head(url[,config])
5:axios.delete(url[,config])
6.axios.put(url[, data[, config]])
7.axios.patch(url[, data[, config]])
8.axios.all(iterable)执行多个并发请求
eg: function getUserAccount() { return axios.get('/user/12345'); } function getUserPermissions() { return axios.get('/user/12345/permissions'); } axios.all([getUserAccount(), getUserPermissions()]) .then(axios.spread(function (acct, perms) { // 两个请求现在都执行完成 }));
9.axios.spread(callback)
3:请求配置
Config
{ // url
是用于请求的服务器 URL url: '/user',
// method
是创建请求时使用的方法 method: 'get', // 默认是 get
// baseURL
将自动加在 url
前面,除非 url
是一个绝对 URL。 // 它可以通过设置一个 baseURL
便于为 axios 实例的方法传递相对 URL baseURL: 'https://some-domain.com/api/',
// transformRequest
允许在向服务器发送前,修改请求数据 // 只能用在 'PUT', 'POST' 和 'PATCH' 这几个请求方法 // 后面数组中的函数必须返回一个字符串,或 ArrayBuffer,或 Stream transformRequest: [function (data) { // 对 data 进行任意转换处理
return data;
}],
// transformResponse
在传递给 then/catch 前,允许修改响应数据 transformResponse: [function (data) { // 对 data 进行任意转换处理
return data;
}],
// headers
是即将被发送的自定义请求头 headers: {'X-Requested-With': 'XMLHttpRequest'},
// params
是即将与请求一起发送的 URL 参数 // 必须是一个无格式对象(plain object)或 URLSearchParams 对象 params: { ID: 12345 },
// paramsSerializer
是一个负责 params
序列化的函数 // (e.g. qs - npm, jQuery.param() | jQuery API Documentation) paramsSerializer: function(params) { return Qs.stringify(params, {arrayFormat: 'brackets'}) },
// data
是作为请求主体被发送的数据 // 只适用于这些请求方法 'PUT', 'POST', 和 'PATCH' // 在没有设置 transformRequest
时,必须是以下类型之一: // - string, plain object, ArrayBuffer, ArrayBufferView, URLSearchParams // - 浏览器专属:FormData, File, Blob // - Node 专属: Stream data: { firstName: 'Fred' },
// timeout
指定请求超时的毫秒数(0 表示无超时时间) // 如果请求话费了超过 timeout
的时间,请求将被中断 timeout: 1000,
// withCredentials
表示跨域请求时是否需要使用凭证 withCredentials: false, // 默认的
// adapter
允许自定义处理请求,以使测试更轻松 // 返回一个 promise 并应用一个有效的响应 (查阅 response docs). adapter: function (config) { /* ... */ },
// auth
表示应该使用 HTTP 基础验证,并提供凭据 // 这将设置一个 Authorization
头,覆写掉现有的任意使用 headers
设置的自定义 Authorization
头 auth: { username: 'janedoe', password: 's00pers3cret' },
// responseType
表示服务器响应的数据类型,可以是 'arraybuffer', 'blob', 'document', 'json', 'text', 'stream' responseType: 'json', // 默认的
// xsrfCookieName
是用作 xsrf token 的值的cookie的名称 xsrfCookieName: 'XSRF-TOKEN', // default
// xsrfHeaderName
是承载 xsrf token 的值的 HTTP 头的名称 xsrfHeaderName: 'X-XSRF-TOKEN', // 默认的
// onUploadProgress
允许为上传处理进度事件 onUploadProgress: function (progressEvent) { // 对原生进度事件的处理 },
// onDownloadProgress
允许为下载处理进度事件 onDownloadProgress: function (progressEvent) { // 对原生进度事件的处理 },
// maxContentLength
定义允许的响应内容的最大尺寸 maxContentLength: 2000,
// validateStatus
定义对于给定的HTTP 响应状态码是 resolve 或 reject promise 。如果 validateStatus
返回 true
(或者设置为 null
或 undefined
),promise 将被 resolve; 否则,promise 将被 rejecte validateStatus: function (status) { return status >= 200 && status < 300; // 默认的 }, // maxRedirects
定义在 node.js 中 follow 的最大重定向数目 // 如果设置为0,将不会 follow 任何重定向 maxRedirects: 5, // 默认的 // httpAgent
和 httpsAgent
分别在 node.js 中用于定义在执行 http 和 https 时使用的自定义代理。允许像这样配置选项: // keepAlive
默认没有启用 httpAgent: new http.Agent({ keepAlive: true }), httpsAgent: new https.Agent({ keepAlive: true }), // 'proxy' 定义代理服务器的主机名称和端口 // auth
表示 HTTP 基础验证应当用于连接代理,并提供凭据 // 这将会设置一个 Proxy-Authorization
头,覆写掉已有的通过使用 header
设置的自定义 Proxy-Authorization
头。 proxy: { host: '127.0.0.1', port: 9000, auth: : { username: 'mikeymike', password: 'rapunz3l' } },
-
//
cancelToken
指定用于取消请求的 cancel token -
// (查看后面的 Cancellation 这节了解更多)
-
cancelToken: new CancelToken(function (cancel) {
-
})
1.全局的 axios 默认值 axios.defaults.baseURL = 'https://api.example.com'; axios.defaults.headers.common['Authorization'] = AUTH_TOKEN; axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; 2.自定义实例默认值 // 创建实例时设置配置的默认值 var instance = axios.create({ baseURL: 'https://api.example.com' }); // 在实例已创建后修改默认值 instance.defaults.headers.common['Authorization'] = AUTH_TOKEN; 3.配置的优先顺序 配置会以一个优先顺序进行合并。这个顺序是:在 lib/defaults.js 找到的库的默认值,然后是实例的 defaults 属性,最后是请求的 config 参数。后者将优先于前者。 这里是一个例子: // 使用由库提供的配置的默认值来创建实例 // 此时超时配置的默认值是 `0` var instance = axios.create(); // 覆写库的超时默认值 // 现在,在超时前,所有请求都会等待 2.5 秒 instance.defaults.timeout = 2500; // 为已知需要花费很长时间的请求覆写超时设置 instance.get('/longRequest', { timeout: 5000 });
// 添加请求拦截器 axios.interceptors.request.use(function (config) { // 在发送请求之前做些什么 return config; }, function (error) { // 对请求错误做些什么 return Promise.reject(error); }); // 添加响应拦截器 axios.interceptors.response.use(function (response) { // 对响应数据做点什么 return response; }, function (error) { // 对响应错误做点什么 return Promise.reject(error); }); 1.如果你想在稍后移除拦截器,可以这样: var myInterceptor = axios.interceptors.request.use(function () {/*...*/}); axios.interceptors.request.eject(myInterceptor); 2.可以为自定义 axios 实例添加拦截器 var instance = axios.create(); instance.interceptors.request.use(function () {/*...*/});
axios.get('/user/12345') .catch(function (error) { if (error.response) { // 请求已发出,但服务器响应的状态码不在 2xx 范围内 console.log(error.response.data); console.log(error.response.status); console.log(error.response.headers); } else { // Something happened in setting up the request that triggered an Error console.log('Error', error.message); } console.log(error.config); });
axios.get('/list/0',{ validateStatus:fucntion(status){ return status<500 //状态码在大于或等于500时才会reject } })
4:注意细节
-
引用 axios 时
Vue.prototype.axios = axios Vue.prototype.$axios = axios Vue.prototype.$http = axios 其实是都一个东西,只是vue的原型链上加个变量(且变量不同),值是axios对象 。
只是 一个是jquery封装过的异步调用方法 一个是vue推荐的第三方异步封装方法 他们都是调用的axios对象
只是调用的时候 axios.post({..}) this.$axios.post({...}) this.$http.post({....})
6:
<template> <div> <h1>axios基础介绍</h1> <button @click="get">get请求</button> <button @click="post">post请求</button> <button @click="http">aixos</button> <p>{{msg}}</p> </div> </template> <script> import axios from 'axios' export default { data () { return { msg:'', } }, created(){ //全局拦截器 axios.interceptors.request.use(function (config) { // 在发送请求之前做些什么 console.log('config') console.log(config) return config; }, function (error) { // 对请求错误做些什么 return Promise.reject(error); }); }, methods: { get(){ //1.简单的获取 // axios.get("/api/seller").then(res =>{ // this.msg = res; // }) //2.传参数 axios.get("/api/seller",{ //传参数 params:{userid:"999"}, //请求头部 headers:{ token:"jack" } }).then(res =>{ this.msg = res; }).catch(function(error){ //获取错误 console.log("error:"+error) }) }, post(){ axios.post("/api/seller",{ //传参数 userid:"888" },{ headers:{//请求头部 token:"tom" } }).then(res =>{ this.msg = res; }).catch(function(error){ //获取错误 console.log("error:"+error) }) }, http(){ //注意:get 传参是params post传参是data axios({ url:"/api/seller", methods:"get", params:{ userid:"101" }, headers:{ token:"http-test" } }).then(res =>{ this.msg = res; }) } } } </script> <style lang="scss"> </style>