vue 项目axios封装

import axios from "axios";
import qs from "qs";
import Vue from "vue";
import { Dialog, Toast } from "cube-ui";
import router from "../router";

Vue.use(Dialog);
Vue.use(Toast);
axios.interceptors.request.use(
  config => {
    if (sessionStorage.getItem("token")) {
      config.headers.token = sessionStorage.getItem("token");
    }
    return config;
  },
  error => {
    return Promise.reject(error);
  }
);

axios.interceptors.response.use(
  response => {
    return response;
  },
  error => {
    return Promise.resolve(error.response);
  }
);

function checkStatus(response) {
  // loading
  // 如果http状态码正常,则直接返回数据
  if (
    response &&
    (response.status === 200 ||
      response.status === 304 ||
      response.status === 400)
  ) {
    return response;
    // 如果不需要除了data之外的数据,可以直接 return response.data
  } else {
    // 如果状态错误,删除token,删除token,路由守卫就会判断。
    sessionStorage.removeItem("token");
    return {
      status: 404,
      msg: "网络异常"
    };
  }
}

function checkCode(res) {
  // 如果code异常(这里已经包括网络错误,服务器错误,后端抛出的错误),可以弹出一个错误提示,告诉用户
  if (res.status != 404) {
    if (res.data.code == "1" || res.data.code == "0") {
      return res.data;
    } else {
      Dialog.$create({
        type: "confirm",
        icon: "",
        title: "",
        content: res.data.msg,
        confirmBtn: {
          text: "去登录",
          active: true,
          disabled: false,
          href: "javascript:;"
        },
        cancelBtn: {
          text: "取消",
          active: false,
          disabled: false,
          href: "javascript:;"
        },
        onConfirm: () => {
          router.push({ name: "login" });
        },
        onCancel: () => {}
      }).show();
      return;
    }
  } else {
    Toast.$create({
      txt: "网络错误",
      type: "txt"
    }).show();
  }
}

export default {
  post(url, data) {
    return axios({
      method: "post",
      baseURL: "/apis/api-app/",
      url,
      data: qs.stringify(data),
      timeout: 2000,
      headers: {
        "X-Requested-With": "XMLHttpRequest",
        "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"
      }
    })
      .then(response => {
        return checkStatus(response);
      })
      .then(res => {
        return checkCode(res);
      });
  }
};

1、token的配置
2、返回code的判断(接口返回成功的code,是和后台商定的。)
3、弹窗的引用
4、路由的跳转

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 我个人理解实现单点登录主要是为了实现单一用户多平台使用,还有增加用户的安全性。之前用 React+ dva ...
    爆发吧小宇宙阅读 28,745评论 4 34
  • ——每一个人,都是历史长河里面的点点星光。远远望去,熠熠灼灼,明暗之间,尽显其生命的意义。 《天桥上的夜莺》 有一...
    析子阅读 4,256评论 6 11
  • 在两个星期之前, 我放弃了原来的工作。 然后来到了深圳, 想开始一段全新的历程。 之所...
    可是没有如果123阅读 1,787评论 3 1
  • 1、感谢项目顺利,一个家访结束,一个香水留置准备就绪节后就开,一个全国汽车长项暂停节后再开,假期可以全心玩耍基本不...
    哈哈飞80阅读 2,948评论 0 4
  • 4.1,愚人节 就这么一言不合的就出发了,自己一点准备都没有,就这么去见他了,感觉,像是梦一样,其实仔细想想,对一...
    京十三阅读 1,313评论 0 0