欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

axios异步请求

程序员文章站 2022-07-02 12:32:24
...

1.认识axios

axios是一个易用,简洁且高效的基于Promise的http库,主要用于网络请求的服务,应用在浏览器或者NodeJS应用环境中

2.axios基本语法

axios是一个基于Promise的http库,用于完成网络请求的处理操作,支持常规的请求方式
基本语法:
get请求

axios.get('/user?id=1')
	.then(response=>{
		console.log(response)
	})
	.catch(err=>{
		console.log(err)
	})
axios.get('/user',params:{id:1})
.then(response=>{
		console.log(response)
	})
	.catch(err=>{
		console.log(err)
	})

post请求

axios.post('user',{
	id:1,
	uname:'张三'
})
.then(response=>{
		console.log(response)
	})
	.catch(err=>{
		console.log(err)
	})

并发请求(多个请求必须同时成功,才处理结果)

function getUserAccount(){
	return axios.get('/good/images/12')
}
function getUserPermiseeions(){
	return axios.get('/good/detail/12')
}
axios.all([getUserAccount(),getUserPermissions()])
.then(axios.spread(acct,perms)=>{}))

通用配置语法
发送POST请求

axios({
	method:'post',
	url:'/user/1',
	data:{
		id:1,
		uname:'张三'
	}	
})

axios配置选项中的常见配置项

{
	url: '/user',  //用于请求的服务器URL
	method:'get', //创建请求时使用的方法
	baseURL:'http://localhost:3000/', //设置一个baseURL,自定拼接在url前面
	transformRequest:[function(data,headers){ //允许在向服务器发送请求之前修改数据,后面数组中的函数必须返回一个字符串或ArrayBuffer,或Strem
		return data  //对data进行任意类型转换
	}],
	headers:{'X-Requested-With':'XMLHttpRequest'},  //为即将发送的数据设置请求头
	params:{id:1},//即将与请求一起发送的URL参数,必须是一个无格式对象(plain object)或URLSearchParams对象
	paramsSeriallizer:function(paramst){  //负责将params序列化函数
		return Qs.stringify(params,{arrayFormat:'brackets'}) 
	},
	data:{
		id:1   //作为请求主体被发送的数据
	},
	timeout:1000,  //指定请求超时的毫秒数,如果请求花费了超过'timeout'时间,请求将被中断
	withCredentials:false, //default 表示跨域请求时是否要使用凭证
	adapter:function(config){  //允许自定处理请求,返回一个oromise并应用一个有效的响应
	},
	auth:{    //表示使用HTTP基础验证,并提供凭证,设置一个Authorization头,覆写掉现有的任意使用headers设置的自定的Authorization头
		username:'zhangsan',
		password:'sdahio'
	},
	responseType:'json', //表示服务器响应的数据类型
	responseEncoding:'utf8', 
	xsrfCookieName:'XSRF-TOKEN', //用作xsrf token的值的cookie的名称
	xsrfHeaderName:'X-XSRF-TOKEN', 
	onUploadProgress:function(progressEvent){
			//允许为上传处理进度事件
	},
	onDownloadProgress:function(progressEvent){
		//对原生进度事件的处理
	},
	maxContentLength:2000, // 定义允许的响应内容的最大尺寸
	validateStatus:function(status){
		return status >= 200 && status < 300 // 定义对于给定的HTTP 响应状态码是 resolve 或 reject  promise 。如果 `validateStatus` 返回 `true` (或者设置为 `null` 或 `undefined`),promise 将被 resolve; 否则,promise 将被 rejecte
	},
	maxRedirects:5, //定义在node.js中follow的最大重定向数目
	sokectPath:null, 
	httpAgent:new http.Agent({keepAlive:true}),
	httpsAgent:new https.Agent({keepAlive:true}), // `httpAgent` 和 `httpsAgent` 分别在 node.js 中用于定义在执行 http 和 https 时使用的自定义代理。允许像这样配置选项:
	proxy:{
		host:'localhost',
		port:'3000',
		auth:{
			username:'mikeymike',
			password:'sahoih'     // 'proxy' 定义代理服务器的主机名称和端口
  // `auth` 表示 HTTP 基础验证应当用于连接代理,并提供凭据
  // 这将会设置一个 `Proxy-Authorization` 头,覆写掉已有的通过使用 `header` 设置的自定义 `Proxy-Authorization` 头。
		}
	},
	cancelToken:new CancelToke(function(cancel){})
}

axios会自动将服务器返回的数据进行封装,按照标准格式返回数据,格式如下

{
	data:{}, //服务器接口返回的真实数据,重点关注data即可
	status:200, //来自服务器响应的HTTP状态码
	statusText:'OK',  //来自服务器响应的HTTP状态信息
	headers:{},  //服务器响应头
	config:{}, //为请求提供的配置信息
	requet:{}
}

axios提供了请求和响应数据之间的,网络数据拦截功能:请求拦截器、响应拦截器

//添加请求拦截器
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)
})

3.axios封装

import Vue from 'Vue'
import axios from 'axios'
const instance = axios.create({
	baseURL:'http://localhost:3000/goods',
	headers:{'myname':'myvalue'}
})
//封装,添加请求和响应拦截器
instance.interceptors.request.use(request=>{
	console.log('拦截到请求',request)
	return request
})
instance.interceptors.responese.use(response=>{
	return response.data
})
Vue.prototype.$http = instance
export default instance