axios封装

295 阅读1分钟

最近学到axios封装,看了挺多人代码,有的封的很怪,明明有些axios封装很好了,还有进行封装,感觉就像画蛇添足,反而不够灵活,然后我总结一下自己认为比较好的吧,不过我也是菜鸟,还得改进。

index.js

import axios from "axios";
import qs from "qs";
import { serverConfig } from "../config";
//创建axios实例
const $http = axios.create({
  baseURL: serverConfig.baseURL,
  timeOut: 10000,
});
//请求拦截
$http.interceptors.request.use(
  (config) => {
    // console.log("请求配置", config);
    //业务逻辑
    //设置token
    if (serverConfig.useTokenAuthorization) {
      config.headers["Authorization"] = localStorage.getItem("token");
    }
    //设置请求头
    if (!config.headers["content-type"]) {
      if (config.method === "post") {
        config.headers["content-type"] = "application/x-www-form/urlencoded"; //post请求
        // config.data=JSON.stringify(config.data);//表序列化,表单数据发送服务器需要序列化
        config.data = qs.stringify(config.data); //表序列化,表单数据发送服务器需要序列化
      } else {
        config.headers["content-type"] = "application/json";
      }
    }
  },
  (error) => {
    Promise.reject(error);
  }
);
//响应拦截
$http.interceptors.response.use(
  (res) => {
    //业务逻辑部分 ,比如判断token值是否过期
    let data = res.data;
    return data;
  },
  (error) => {
    let message = "";
    if (error && error.response) {
      switch (error.response.status) {
        case 302:
          message = "接口重定向了!";
          break;
        case 400:
          message = "参数不正确!";
          break;
        case 401:
          message = "您未登录,或者登录已经超时,请先登录!";
          break;
        case 403:
          message = "您没有权限操作!";
          break;
        case 404:
          message = `请求地址出错: ${error.response.config.url}`;
          break;
        case 408:
          message = "请求超时!";
          break;
        case 409:
          message = "系统已存在相同数据!";
          break;
        case 500:
          message = "服务器内部错误!";
          break;
        case 501:
          message = "服务未实现!";
          break;
        case 502:
          message = "网关错误!";
          break;
        case 503:
          message = "服务不可用!";
          break;
        case 504:
          message = "服务暂时无法访问,请稍后再试!";
          break;
        case 505:
          message = "HTTP 版本不受支持!";
          break;
        default:
          message = "异常问题,请联系管理员!";
          break;
      }
    }
    return Promise.reject(message);
  }
);

export default $http;

config.js

let baseURL = "";
if (process.env.NODE_ENV === "production") {
  //发布环境
  baseURL = "https://host/production/api";
} else if (process.env.NODE_ENV === "development") {
  //生产环境
  baseURL = "https://host/development/api";
} else if (process.env.NODE_ENV === "test") {
  //测试环境
  baseURL = "https://host/test/api";
}
const serverConfig = {
  baseURL: baseURL,
  useTokenAuthorization: true,
};
export default serverConfig;

api

import $http from "../index";
export const getUserInfo = (params) => {
  return $http({
    methods: "get",
    url: "/user/userInfo",
    params,
  });
};

export const login = (data) => {
  return $http({
    methods: "post",
    url: "/user/login",
    data,
  });
};