Axios封装

167 阅读2分钟

//axios.js文件import axios from 'axios'; //引入axios模块import QS from 'qs' ;//引入qs模块用来序列化post类型的数据import store form '@/store/index' //引入vuex中的store//对于环境的切换 (开发环境,测试环境,生产环境)if(process.evn.NODE_ENV === 'development'){    axios.defaults.baseURL = 'https://www.baidu.com'}else if(process.evn.NODE_ENV === 'debug'){    axios.defaults.baseURL = 'https://www.ceshi.com';}else if(process.evn.NODE_ENV === 'product'){    axios.defaults.baseURL = 'https://www.ceshi.com';}//请求超时处理(默认不能超过10s,否则提示用户)axios.defaults.timeout = 10000;//请求头设置//请求拦截器axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8';//请求拦截(某些请求需要用户登录或者对post的请求序列化提交的数据,所以要进行拦截)axios.interceptors.request.use( config=>{    //先判断vuex中是否存在token    const token = store.state.token    token && (config.header,Authorization = token); //如果存在,就统一在请求头上加上token,让后台判断这个token的状态    return config//即便有token也要判断这个token是否过期,所以要在响应拦截器中对返回的状态去进行判断},error=>{    return Promise.error(error)    })//响应拦截器axios.interceptors.response.use(response=>{    response=>{      if(response.status ===200){        return Promise.resolve(response) //200指请求成功,直接获取到数据      }else{        return Promise.reject(response) //指不成功,直接抛出错误      }    }},error=>{  // 这边指的是非200状态下的情况  if(error.response.status){    switch(error.response.status){      case 401: //状态为未登陆,返回到登陆页面并携带当前页面的路径        router.replace({path:'/login',query:{redirect:router.currentRoute.fullPath}})        break;      case 403: //token过期,重新登陆        //这边可以给出一个提示,用element或者vant的提示框去提示        localStorage.removeItem('token');//清除当前的token        store.commit('loginSuccess',null);        //回到登陆页面然后将当前的路径带过去,便于等等登陆后跳转到刚刚的页面        setTimeout(()=>{          router.replace({})        },1000);        break;      case 404:        // 提示网络请求不存在(api错误)        break;      default:        // 提示    }    return Promise.reject(error.response)  }})// 封装get和post方法// url指的是api的路径,parmas指的是带的参数// getexport function get(url,params){  return new Promise((resolve,reject)=>{    axios.get(url,{      params:params    }).then(res=>{      resolve(res)    }).catch(err=>{      reject(err.data)    })  })}// postexport function post(url,params){  return new Promise((resolve,reject)=>{    axios.post(url,QS.stringify(params)).then(res=>{      resolve(res)    }).catch(err=>{      reject(err.data)    })  })}

//api.js
import { get, post } from './axios.js' //引入刚刚定义好的post和get

export const apiAddress = p => post('api/aaa/bbb/ccc', p);

//其他页面引用
import { apiAddress } from '@/request/api';// 导入我们的api接口
export default {        
    name: 'Address',    
    created () {
        this.onLoad();
    },
    methods: {            
        // 获取数据            
        onLoad() {
            // 调用api接口,并且提供了两个参数                
            apiAddress({                    
                type: 0,                    
                sort: 1                
            }).then(res => {
                // 获取数据成功后的其他操作
                ………………                
            })            
        }        
    }
}

此文章借鉴作者:愣锤

文章链接为:https://juejin.cn/post/6844903652881072141