Vue中的axios請求封裝

鎮(zhèn)樓.jpg

axios.interceptors.request.use() // 開始進(jìn)行攔截請求诽嘉。
axios.interceptors.response.use()//攔截請求響應(yīng)數(shù)據(jù)。

在發(fā)送axios請求時辨萍,如果每個組件都需要各自發(fā)送的話烘跺,那么代碼太過冗余湘纵。
所以可以將請求方法進(jìn)行封裝。

創(chuàng)建ajax.js用于處理各種請求方式:
最近進(jìn)行了優(yōu)化:新增一個單獨(dú)的關(guān)于文件上傳的請求函數(shù)

import axios, {
  AxiosRequestConfig,
  AxiosResponse,
  AxiosError
} from 'axios'

// timeout 10min
const Global_Delay = 10 * 60 * 1000;

const BASE_URL = 'http://127.0.0.1:9898/blogManage';
// 定義一個空的數(shù)組滤淳,用于存放請求中的參數(shù)

// 創(chuàng)建axios實(shí)例
const axiosInstance = () => {
  const instance = axios.create({
    baseURL: BASE_URL,
    timeout: Global_Delay,
  });
  return instance;
};


// 請求實(shí)例
const publicReq = async (params: { [key: string]: any }) => {
  const {
    url,
    method,
    param
  } = params;
  const instance = axiosInstance();
  return await instance({
    url,
    method,
    // 在請求頭里面添加token 如果沒有則為空字符串
    headers: {
      'token': localStorage.getItem('token') === null ? '' : localStorage.getItem('token')
    },
    [method === 'post' ? 'data' : 'params']: param || {},
    transformRequest: [function (data) {
      let ret = ''
      let index = 0;
      for (let key in data) {
        if (data[key] === null) {
          ret += `${index === 0 ? '' : '&'}key=&`
        } else {
          ret += `${index === 0 ? '' : '&'}${encodeURIComponent(key)}=${encodeURIComponent(data[key])}`
        }
        index += 1;
      }
      return ret
    }]
  }).then((res: AxiosResponse) => {
    if (res) {
      if (res.data.code === 403) {
        window.location.href = "/signin";
        localStorage.removeItem("name");
        localStorage.removeItem("id");
        localStorage.removeItem("avatar_url");
        localStorage.removeItem("token")
        throw new Error(res.statusText);
      }
      if (res.data.code !== 200) {
        throw new Error(res.data.data)
      } else {
        return res.data;
      }
    }
  });
};

// 請求超時函數(shù)
const timeoutfn = (delay: number, url: string) => {
  return new Promise(resolve => {
    setTimeout(() => {
      resolve('請求超時');
    }, delay);
  });
};

// 單個請求 存在請求超時
export async function req(params: { [key: string]: any }, delay = Global_Delay) {
  try {
    const response: any = await Promise.race([
      timeoutfn(delay, params.url),
      publicReq(params),
    ]);
    if (response.data.code === 401) {
      localStorage.removeItem("token");
      location.href = '/';
    }
    return response;
  } catch (error) {
    throw new Error(error);
  }
}

// GET request
export async function getRequest(url: string, param: { [key: string]: any }) {
  try {
    const response = await req({
      url,
      method: 'get',
      param,
    });
    return response;
  } catch (err) {
    console.log(err);
  }
}

// POST request
export async function postRequest(url: string, param: { [key: string]: any }) {
  try {
    const response = await req({
      url,
      method: 'post',
      param,
    });
    return response;
  } catch (err) {
    console.log(err);
  }
}


如果模塊過多可以分文件存儲然后在index.js文件下引入向外暴露

import AdminModule from "./admin"
import ArticleModule from "./article"
import BannerModule from "./banner"
import DictionaryModule from "./dictionary"
import UploaderModule from "./uploader"

export default {
  AdminModule,
  ArticleModule,
  BannerModule,
  DictionaryModule,
  UploaderModule
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末梧喷,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子脖咐,更是在濱河造成了極大的恐慌铺敌,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件屁擅,死亡現(xiàn)場離奇詭異偿凭,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)派歌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進(jìn)店門弯囊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人胶果,你說我怎么就攤上這事匾嘱。” “怎么了早抠?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵霎烙,是天一觀的道長。 經(jīng)常有香客問我蕊连,道長悬垃,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任咪奖,我火速辦了婚禮盗忱,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘羊赵。我一直安慰自己趟佃,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布昧捷。 她就那樣靜靜地躺著闲昭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪靡挥。 梳的紋絲不亂的頭發(fā)上序矩,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天,我揣著相機(jī)與錄音跋破,去河邊找鬼簸淀。 笑死瓶蝴,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的租幕。 我是一名探鬼主播舷手,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼劲绪!你這毒婦竟也來了男窟?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤贾富,失蹤者是張志新(化名)和其女友劉穎歉眷,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體颤枪,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡汗捡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了汇鞭。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片凉唐。...
    茶點(diǎn)故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖霍骄,靈堂內(nèi)的尸體忽然破棺而出台囱,到底是詐尸還是另有隱情,我是刑警寧澤读整,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布簿训,位于F島的核電站,受9級特大地震影響米间,放射性物質(zhì)發(fā)生泄漏强品。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一屈糊、第九天 我趴在偏房一處隱蔽的房頂上張望的榛。 院中可真熱鬧,春花似錦逻锐、人聲如沸夫晌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽晓淀。三九已至,卻和暖如春盏档,著一層夾襖步出監(jiān)牢的瞬間凶掰,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留懦窘,地道東北人前翎。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像奶赠,于是被迫代替她去往敵國和親鱼填。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評論 2 351

推薦閱讀更多精彩內(nèi)容

  • 我們所要的說的axios的封裝和api接口的統(tǒng)一管理毅戈,其實(shí)主要目的就是在幫助我們簡化代碼和利于后期的更新維護(hù)。 一...
    kangaroo_v閱讀 8,427評論 1 67
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5愤惰? 答:HTML5是最新的HTML標(biāo)準(zhǔn)苇经。 注意:講述HT...
    kismetajun閱讀 27,453評論 1 45
  • ## 框架和庫的區(qū)別?> 框架(framework):一套完整的軟件設(shè)計(jì)架構(gòu)和**解決方案**。> > 庫(lib...
    Rui_bdad閱讀 2,899評論 1 4
  • 出差回來的途中宦言,看見平原大地上不時的冒出那一處處的墳?zāi)股鹊ィ挥上肫鹉膫€地方曾經(jīng)組織過平墳運(yùn)動,就是說把地上冒出來的墳...
    Arui78閱讀 236評論 0 5
  • 當(dāng)看到朋友這個主題時奠旺,心里特復(fù)雜感覺有很多的感受都想寫蜘澜,一直都在梳理。從小學(xué)到中學(xué)响疚、中專身邊朋友很多鄙信,但我并...
    yummy2007閱讀 113評論 1 0