axios的封装
1 封装的axios.js放在utils下面,utils是配置文件(baseURL表示请求url公共部分)
(一)
1 import axios from 'axios' 2 import qs from 'qs' 3 axios.defaults.baseURL = process.env.NODE_ENV==='production'?'/.../api':'/' 4 axios.defaults.timeout= 20000; 5 axios.defaults.headers={'content-Type':'application/x-www-form-urlencoded;charset=UTF-8'}; 6 7 const service=axios.create(); 8 9 service.interceptors.request.use(function (config) { 10 config.method === 'POST' ? 11 config.data = qs.stringify({...config.data}) : 12 config.params = ({...config.params}); 13 return config 14 },error => { 15 16 }); 17 18 // 拦截器,拦截请求之后,数据返回之前 19 service.interceptors.response.use( 20 respones => { 21 // console.log(respones) 22 return respones.data 23 }, 24 error => { 25 Promise.reject(error) 26 } 27 ); 28 export default service
(二)
1 import axios from 'axios' 2 import qs from 'qs' 3 axios.defaults.baseURL = process.env.NODE_ENV === 'production' ? '/qdwe' : '/api' 4 axios.defaults.timeout = 20000 5 const service = axios.create({ 6 retry: 2 ,// 请求次数, 7 retryInterval: 1000 // 请求超时后,1s再次请求 8 }) 9 10 service.interceptors.request.use(function (config) { 11 // 请求之前的处理,token,(js-cookie),store处理 12 config.method === 'POST' 13 ? config.data = qs.stringify({...config.data}) 14 : config.params = {...config.params}; 15 config.headers['Content-type'] = 'application/x-www-form-urlencoded;chartset=UTF-8' 16 return config 17 }, function (error) { 18 return Promise.reject(error) 19 }) 20 21 service.interceptors.response.use( 22 response => { 23 24 if (response.status === 200) { 25 return response.data 26 } else if (response.status === 500) { 27 // 28 //console.log('0000') 29 } 30 } , 31 error => { 32 //console.log(error) 33 // 请求超时,处理 34 const config = error.config 35 if(!config || !config.retry) return Promise.reject(error) 36 // 重新请求次数 37 config.retryCount = config.retryCount || 0 38 // 请求次数是否上限 39 if(config.retryCount >= config.retry){ 40 return Promise.reject(error) 41 } 42 config.retryCount += 1 43 // 重新发起请求 44 const back = new Promise(function(resolve){ 45 setTimeout(() => { 46 resolve() 47 },config.retryInterval || 1) 48 }) 49 // 返回axios实体 50 return back.then(() => { 51 return service(config) 52 }) 53 } 54 ) 55 56 export default service
2 新建文件夹request,下一级新建api.js文件 (用于全局使用)
1 import service from '../utils/axios' 2 // POST请求对的参数放在data,GET请求放在params 3 export const info = (id) =>{ 4 return service({ 5 url: ' ', 6 method: 'GET', 7 params:{ 8 prisonsId : id 9 } 10 }) 11 }
3 需要调用接口的页面
1 <script> 2 import { info} from "../request/api"; 3 4 data(){ 5 return{ 6 kssData() 7 } 8 } 9 created(){ 10 info(this.pageIndex).then(res => { 11 // console.log('res',res); 12 this.kssData = res.data 13 }).catch(err => { 14 }); 15 } 16 </script>