Axios全局管理

新建http.js

1、引入axios

? ??import axios from "axios";


2、設置axios默認url(需不需要設置需要根據(jù)項目來確定)

axios.defaults.baseURL = "默認url";


3、設置包裝請求參數(shù)(request攔截器)

axios.interceptors.request.use(?

? ??????config => {

? ??????????????let requestData = config.data;

? ??????????????config.data = JSON.stringify(requestData);

? ? ? ? ? ? ? ? setHeader(config);

? ??????????????return config;

? ? ? ? },

? ??????err => {

? ??????????????return Promise.reject(err);

? ? ? ? }

};


4、設置header、token信息(統(tǒng)一設置)

function setHeader(config) {

? ??????config.headers["Content-Type"] = "application/json";

}

在setHeader中可以做很多處理,比如有登錄頁面的話,是不需要加token、在初次打開頁面時也是獲取不到存儲的token

在這里面就需要做相應的校驗

function setHeader(config) {?

? ??????let now_href = window.location.href;

? ??????let userTockenType = getLocalUserInfo("userTockenType");

? ? ? ? let userTockenName = getLocalUserInfo("userTockenName");

? ? ? ? if(now_href.indexOf('Login') == -1 && userTockenType && userTockenName){

? ??????????????// 檢驗當前頁面不是登錄頁面 && 有token類型 && 有token名

? ??????????????config.headers["Authorization"] = userTockenType + " " + userTockenName; // 檢驗通過設置token

? ? ? ? }

? ? ? ? // 下面也可以設置一些公共Header? ? ? ??

? ? ? ??config.headers["Content-Type"] = "application/json";

? ??????config.headers["Access-Control-Allow-Origin"] = "*";

}

這里的setHeader函數(shù)在(3)中調(diào)用


5、設置http response 攔截器

axios.interceptors.response.use(?

? ??????config => {

? ??????????????return config

? ? ? ? },

? ??????error => {

? ??????????????return Promise.reject(res.data)

? ? ? ? }

)


6、封裝一些方法(方便調(diào)用)

fetch 請求方法:

export function fetch(url, params = {}) {

? ??????return new Promise((resolve, reject) => {

? ??????????????axios

? ??????????????????????.get(url, {

? ??????????????????????????????params: params

? ? ? ? ? ? ? ? ? ? ? ? })

? ??????????????????????.then(response => {

? ??????????????????????????????resolve(response.data); })

? ? ? ? ? ? ? ? ? ? ? ? })

? ??????????????????????.catch(err => {

? ??????????????????????????????reject(err);

? ? ? ? ? ? ? ? ? ? ? ? })

? ? ? ? })

}


delete 請求方法:

export function delet(url, params = {}) {

? ??????return new Promise((resolve, reject) => {

? ??????????????axios

? ??????????????????????.delete(url, {

? ??????????????????????????????params: params

? ? ? ? ? ? ? ? ? ? ? ? })

? ??????????????????????.then(response => {

? ??????????????????????????????resolve(response.data);

? ? ? ? ? ? ? ? ? ? ? ?})

? ??????????????????????.catch(err => {

? ??????????????????????????????reject(err);

? ? ? ? ? ? ? ? ? ? ? ? })

? ? ? ? })

}


put 方法封裝:

export function put(url, data = {}) {

? ??????return new Promise((resolve, reject) => {

? ??????????????axios.put(url, data).then(

? ??????????????????????response => {

? ??????????????????????????????resolve(response.data);

? ? ? ? ? ? ? ? ? ? ? ? },

? ??????????????????????err => {

? ??????????????????????????????reject(err);

? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? )

? ? ? ? })

}

這些方法只是舉例,其他方法封裝同理

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

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

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