axios二次封装(前端封装)

224 阅读1分钟

二次封装提升方便性和维护性,能在二次封装中添加加载和进度条等效果

1 创建文件

在src创/common/api/request.js

2 二次封装request.js

import { Indicator } from "mint-ui";
import axios from "axios";
import store from "@/store";
import router from "@/router";
export default {
  common: {
    method: "GET",
    data: {},
    params: {},
    headers: {},
  },
  $axios(options = {}) {
    options.method = options.method || this.common.method;
    options.data = options.data || this.common.data;
    options.params = options.params || this.common.params;
    options.headers = options.headers || this.common.headers;

    //请求前加载中
    Indicator.open();
    //是否是登录状态
    if (options.headers.token) {
      options.headers.token = store.state.user.token;
      if (!options.headers.token) {
        router.push("/login");
      }
    }
    return axios(options).then((v) => {
      let data = v.data.data;
      
      //如果token过期 重新登录
      if (data.code === 1000) {
        Indicator.close();
        return router.push("/login");
      }
      return new Promise((res, rej) => {
        if (!v) return rej();
        setTimeout(() => {
          Indicator.close();
        }, 500);
        res(data);
      });
    });
  },
};

3 引入引用

在需要使用接口的组件中引用

import http from "@/common/api/request.js"

 async getData() {
      let res = await http.$axios({
        url: "/api/index_list/0/data/1",
      });
      console.log(res);
      this.items = Object.freeze(res.topBar);
      // this.items = res.data.data.topBar;
      this.newData = Object.freeze(res.data);
      this.$nextTick(() => {
        this.obetterScroll = new BetterScroll(".wrapper", {
          movable: true,
          zoom: true,
        });
        1;
      });
    },