基于axios的请求拦截和响应处理技术封装
在axios的请求上使用请求拦截,和响应后处理的方式一个封装处理
首先需要引入使用axios
在发出请求响应之前做技术处理(参数进行验证=>例如登录token数据参数发起请求是判断是否存在)
import axios from 'axios' 封装固定参数配置,再实现请求拦截 const Axios = axios.create({ timeout:5000, baseUrl:'/apis' }) 在发起请求前做一个拦截,主要是做请求参数处理 需要返回数据数据再继续发出请求 Axios.interceptors.request.use(function(config){ console.log(config) //模拟token数据 请求是否存在来判断是否发送请求 let token='token' //定义数组请求地址,不要拦截的地址进行定义,过滤请求地址使用拦截 let otherPath=['/user/app/code','/user/app/login'] //使用includes判断是否包含上面的地址就不要拦截(登录不要拦截,并加上加工的数据返回) if(otherPath.includes(config.url)){ return config }else{ //如果需要拦截,就对token进行校验不存在返回错误 if(!token){ return Promise.reject({code:400.message:'当前用户没有登录,所以就不能发出异步请求'}) }else{ //可以对config数据进行加工在头部,添加上token数据 //直接返回发出请求 return config } } })
axios响应之后进行拦截处理:=>(这里对用户进行响应之后的身份是否正确验证进行,设置token失效)
Axios.interceptors.response.use(function(response){ //函数可以打印arguments //判断返回是否是403,是则抛出异常,中断请求,提示token失效,重新登录 if(response,data.code ===403){ //throw new TypeError('用户token失效') return Promise.reject('用户token失效') }else{ //正常业务直接返回对象 return response } })
axios请求函数封装:(主要配置 url地址,延时时效,请求方法,请求体参数,)
//调用时传参 function ajaxFunc(req){ //判断url地址是否传递,--JS是主线程运行应用,所以可以使用异常抛出直接中断当前的线程 if(!req.url){ throw new SystaxError('请求的url参数是必传的') } return new Promise(resolve=>{ //发送请求实例对象axios.request Axios.request({ //设置请求地址 url:req.url, method:req.method || 'GET' //params参数配置 -- 它的参数会自动拼接到url地址上 params:req.params || {}, //data参数 -- 不要在get请求中使用,它是请求体参数 data:req.data ||{}, //}).then(data=>{ //请求返回一个是response对象,希望得到数据 }).then(({data})=>{ //可以对response对象进行解构赋值 //返回数据 resolve(data) }).catch(e=>{ console.log('----请求失败') resolve(e) }) }) } export default ajaxFunc
对封装的axios请求进行接口调用: api数据接口调用=>引入单个导入请求方法接口函数,使用async+await来进行同步接收处理数据
//接口调用实例 //对所有的登录接口进行封装,只接收参数,然后返回请求结果,所有的接口都应该单独导出 //引入封装后的axios请求的方法 import AJax from './Ajax' //单独导出一个获取验证码的接口 ,调用这个方法时这里传入参数 export function getVdtCodeApi(phone){ //返回一个Promise回去 return Ajax({ url:'/user/app/code', //params接收的是一个对象 //params{phone:phone} params:{phone} }) } //动态接口传递参数值:/user/:id 文档形式,/user/{id} swagger形式 //在使用的时候,需要把:id或则是{id} 替换为需要传递的参数值 export function getUserInfoApi(id){ return Ajax({ // url:'/user/' + id url:`/user/${id}` }) }
在页面请求数据时需要引入上面的接口调用返回结果: