Axios的封装以及如何使用
Axios的封装以及如何使用
提示:本文根据黑马B站视频课整理
有小伙伴在评论里让我出一篇关于Axios的,本文就整理了一下Axios的使用封装的问题,视频指路 黑马程序员
提示:以下是本篇文章正文内容,下面案例可供参考
一、Axios是什么
Axios 就是对 ajax 的封装
- 之前如何发起数据请求
- 最原生的
new XMLHttpRequest对象发起Ajax请求(open send onreadystatechange readyState responseText) $.ajax{{配置对象}}$.post(url地址,function(){})$.get(url地址,处理函数)- 当然还有后来出的
Fetch(这里就不多做解释,大家感兴趣可以专门去搜一下fetch的使用方法~) - 现在用的
axios来发起ajax请求 - 可以支持
get和post等请求,但是无法发起JSONP请求 - 如果涉及到
JSONP请求,可以让后端启用cors跨域资源共享即可 - 在
Vue中,还可以使用vue-resource封装的ajax发起数据请求 - 在
vue-resource支持get,post,jsonp请求
二、下载
参考网址:axioscdn方式:<script src="https://unpkg.com/axios/dist/axios.min.js"></script> npm方式:npm install axios
三、使用axios
3.1 发起get请求
- 语法:
- 请求地址:
http://地址?xx=yy&xx=yy&xx=yy - 返回结果
result体现的是Promise对象,本身可以调用then或catch方法,或通过async或await进一步修饰 给服务器传递参数的时候需要借助
params成员const result = axios.get(地址,{params:{xx:yy,xx:yy,xx:yy....}})async和await介入async function getList(){ var result = await axios.get('http://127.0.0.1:3000/api/get') }3.2 发起post请求
语法:
axios.post(地址,{xx:yy,xx:yy,xx:yy})例子:
async function send_post() { let result = await axios.post('http://127.0.0.1:3000/api/post', {name: 'hello', age: 18}) console.log(result) }3.3 例子
<div id="app"> <button @click="send_post()">post请求</button> <button @click="send_get()">get请求</button> </div> <script> var vm = new Vue({ el: '#app', data: { msg: 'aaa' }, methods: { async send_get() { var {data: dt} = await axios.get('http://127.0.0.1:3000/api/get', {params:{name: 'hello', age: 18}}) console.log(dt) }, async send_post() { var {data: dt} = await axios.post('http://127.0.0.1:3000/api/post', {name: 'hello', age: 18}) console.log(dt) } } }) </script>
四、Axios的配置
把
axios配置给Vue并成为其一个子成员,每次需要通过Vue触发axios调用(axios自己不要贸然执行)Vue.prototype.$http = axios// 在main.js中配置 this.$http.get()// 在组件中使用,$http是vue指向axios的成员名称,可以自定义为其他给
axios设置请求根地址,统一设置请求地址的前缀,做应用的时候就使用后缀,提升开发效率axios.defaults.baseURL = '根地址' //语法// 引入axios和配置 axios.defaults.baseURL = 'http://127.0.0.1:3000/api' Vue.prototype.$http = axios
五、拦截器interceptors
5.1 为什么使用拦截器
axios在客户端与服务端之间传递数据时候是有时间消耗的- 网络好、服务器比较空闲,
axios的执行速度快 - 网络不好、服务器比较繁忙,
axios的执行速度慢(这时用户需要多等待) axios无论执行速度快还是慢,用户都需要等待,如果在axios执行过程中页面给予一定的提示,那么用户体验就比较好,这时候拦截器就可以应用上5.2 axios本身有两种拦截器:请求拦截、响应拦截
- 请求拦截器
axios每次开始请求的时候先执行此处逻辑,在这个地方可以给axios做出发前的配置,也可以做出发前的检查工作,检查ok的情况下就开始向服务器端发请求config代表axios请求的配置对象,后期可以借此给axios做相关配置// axios的请求拦截器 axios.interceptors.request.use(function(config) { // ------------------------------------------- // axios请求前的逻辑处理 nprogress.start() var token = window.sessionStorage.getItem('token') if (token !== null) { config.headers.Authorization = token } //--------------------------------------- return config }, function(error) { return Promise.reject(error) })- 响应拦截器
axios完成与服务端机交互回到客户端后就执行此处逻辑,在这个地方可以做一些后续收尾事宜response代表服务器端给axios返回的信息,一般不做处理// 添加响应拦截器 axios.interceptors.response.use(function(response) { // 对响应数据做点什么 nprogress.done() return response }, function(error) { // 对响应错误做点什么 return Promise.reject(error) })六、封装Axios
6.1 封装
- 在
Vue项目中,可以在src根目录下新建一个axios.js(或axios.ts) 
- 在
React项目中,可以新建一个request文件夹,request文件夹中新建一个request.js(或request.ts)
import axios from 'axios'
// 如果是ts文件可以加上这个接口
// 配置项接口
/**interface AxiosOption {
baseURL: string
timeout: number
}*/
// 配置项
//const axiosOption: AxiosOption = { // ts的话使用这个限定类型
const axiosOption = {
baseURL: 'http://127.0.0.1:9000/manage',
// baseURL: '/api',// 配置跨域后可以使用这个/api这个不固定,可以根据自己配置的跨域替换
timeout: 5000,
}
// 创建一个单例
// 由于实际项目中可能会有多个接口地址
// create可以创建多个实例,在接口中要用几个地址就可以创建几个实例
const instance = axios.create(axiosOption)
// 添加请求拦截器
instance.interceptors.request.use(
function (config) {
// axios请求前的逻辑处理
return config
},
function (error) {
// 对请求错误做些什么
return Promise.reject(error)
}
)
// 添加响应拦截器
instance.interceptors.response.use(
function (response) {
// 对响应数据做点什么
return response.data
},
function (error) {
// 对响应错误做点什么
return Promise.reject(error)
}
)
export default instance6.2 封装后使用
vue中,新建api.js接口模块// 导入封装的axios import axios from '../axios' export default { //---------------------------隐藏页面---------------------------------------------- /** * 添加 */ hideParameterAdd(data) { return axios.post(`/add`, data) }, }//在要使用的.vue组件中import导入 <script> import Api from '../api/api' export default { methods: { async getData () { let { data } = await Api.hideParameterAdd({id:1,name:'张三'}) console.log(data) } } } </script>在
React中,新建api.js// 导入封装的request.js import request from './request' // 注册接口 export const registerApi = (params) => request.post('/register', params)// React组件中 import React, { useState } from 'react' // 在要使用的页面导入api.js import { loginApi } from './request/api' export default function Login() { const onFinish = async (values) => { loginApi(values).then((res: IResRegister) => { console.log(res) }) } return ( <div className="login"> 111 </div> ) }
总结
提示:这里对文章进行总结:
以上就是Axios的介绍以及封装,封装之后再Vue中和在React中如何使用,如果感觉写的实用可以辛苦大家点个赞啦,谢谢,文章会不定期更新哒。
转载自:https://segmentfault.com/a/1190000041849943