沃梦达 / IT编程 / 移动开发 / 正文

Axios的二次封装

新建文件src目录下新建api文件夹并新建http.js导入axios和qsimport axios from axios;import qs from qs;根据环境变量区分接口的默认地址switch (process.env.NODE_ENV) {case production:axios.defaults.b...

新建文件

src目录下新建api文件夹并新建http.js

  • 导入axios和qs
import axios from 'axios';
import qs from 'qs';
  • 根据环境变量区分接口的默认地址
switch (process.env.NODE_ENV) {
  case "production":
    axios.defaults.baseURL = "http://api.wangjie.com";
    break;
  case "test":
    axios.defaults.baseURL = "http://api.test.com";
    break;
  default:
    axios.defaults.baseURL = "http://localhost:8080"
}
  • 设置超时时间和跨域是否允许携带凭证
axios.defaults.timeout = 10000;
axios.defaults.withCredentials = true;
  • 设置请求传递数据的格式
axios.defaults.headers['Content-Type'] = 'application/x-www-form-urlencoded';
axios.defaults.transformRequest = data => qs.stringify(data);
  • 设置请求拦截器
axios.interceptors.request.use(config => {
  // 携带token
  let token = localStorage.getItem('token');
  token && (config.headers.Authorization = token)
  return config
}, error => {
  return Promise(reject(error))
});
  • 设置响应拦截器
axios.interceptors.response.use(response => {
  return response.data;
}, error => {
  let { response } = error;
  if (response) {
    switch (response.status) {
      case 401: // 权限不足,未登录状态
        break;
      case 403: // 服务器拒绝执行 token/session过期
        break;
      case 404: // 找不到页面
        break;
    }
  } else {
    if (!window.navigator.onLine) {
      // 断网处理
      return;
    } else {
      return Promise.reject(error);
    }
  }
})
  • 导出配置
    export default axios;

本文标题为:Axios的二次封装