vue 項(xiàng)目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狀態(tài)碼正常,則直接返回?cái)?shù)據(jù)
  if (
    response &&
    (response.status === 200 ||
      response.status === 304 ||
      response.status === 400)
  ) {
    return response;
    // 如果不需要除了data之外的數(shù)據(jù),可以直接 return response.data
  } else {
    // 如果狀態(tài)錯(cuò)誤,刪除token,刪除token,路由守衛(wèi)就會(huì)判斷。
    sessionStorage.removeItem("token");
    return {
      status: 404,
      msg: "網(wǎng)絡(luò)異常"
    };
  }
}

function checkCode(res) {
  // 如果code異常(這里已經(jīng)包括網(wǎng)絡(luò)錯(cuò)誤,服務(wù)器錯(cuò)誤,后端拋出的錯(cuò)誤),可以彈出一個(gè)錯(cuò)誤提示,告訴用戶(hù)
  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: "網(wǎng)絡(luò)錯(cuò)誤",
      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,是和后臺(tái)商定的。)
3、彈窗的引用
4、路由的跳轉(zhuǎn)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 我個(gè)人理解實(shí)現(xiàn)單點(diǎn)登錄主要是為了實(shí)現(xiàn)單一用戶(hù)多平臺(tái)使用,還有增加用戶(hù)的安全性。之前用 React+ dva ...
    爆發(fā)吧小宇宙閱讀 28,907評(píng)論 4 34
  • ——每一個(gè)人,都是歷史長(zhǎng)河里面的點(diǎn)點(diǎn)星光。遠(yuǎn)遠(yuǎn)望去,熠熠灼灼,明暗之間,盡顯其生命的意義。 《天橋上的夜鶯》 有一...
    析子閱讀 923評(píng)論 6 11
  • 在兩個(gè)星期之前, 我放棄了原來(lái)的工作。 然后來(lái)到了深圳, 想開(kāi)始一段全新的歷程。 之所...
    可是沒(méi)有如果123閱讀 322評(píng)論 3 1
  • 1、感謝項(xiàng)目順利,一個(gè)家訪(fǎng)結(jié)束,一個(gè)香水留置準(zhǔn)備就緒節(jié)后就開(kāi),一個(gè)全國(guó)汽車(chē)長(zhǎng)項(xiàng)暫停節(jié)后再開(kāi),假期可以全心玩?;静?..
    哈哈飛80閱讀 462評(píng)論 0 4
  • 4.1,愚人節(jié) 就這么一言不合的就出發(fā)了,自己一點(diǎn)準(zhǔn)備都沒(méi)有,就這么去見(jiàn)他了,感覺(jué),像是夢(mèng)一樣,其實(shí)仔細(xì)想想,對(duì)一...
    京十三閱讀 223評(píng)論 0 0

友情鏈接更多精彩內(nèi)容