axios模塊化封裝實(shí)例化及vue本地解決跨域方案
正文
開(kāi)發(fā)環(huán)境 vue+axios+typescript+eslint+prettier
電腦系統(tǒng) windows10專業(yè)版
在使用vue開(kāi)發(fā)的過(guò)程中,我們?cè)跀?shù)據(jù)交互的過(guò)程中,一般會(huì)選擇使用axios,很多小伙伴都在使用,下面我來(lái)分享一下axios封裝和vue開(kāi)發(fā)解決跨域。
安裝axios
npm i axios -S
后端接口如下
主機(jī)一:http://192.168.0.103:8020 接口: /api/login 主機(jī)二: http://192.168.0.103:3000 接口: /chen
根目錄結(jié)構(gòu)
在根目錄下,新建文件,目錄結(jié)構(gòu)如下:
----src ----.env.development ----.env.production ----.env.test

env.development代碼
NODE_ENV = 'development' //指定當(dāng)前環(huán)境模式 VUE_APP_CURRENTMODE = 'development' VUE_APP_BASE_URL = "http://192.168.0.103:8020" VUE_APP_BASE_PL="http://192.168.0.103:3000" VUE_APP_BASE_PLAPI="/chen" VUE_APP_BASE_API="/api"
在src錄下,新建network文件夾,目錄結(jié)構(gòu)如下:
----src -----network ------Instances(實(shí)例集合) -------index.ts(引入實(shí)例) -------Instance1.ts(實(shí)例1) -------Instance2.ts(實(shí)例2) ------api.js(接口封裝)

Instances下Instance1.ts代碼
import axios from "axios";
export const Instance1 = (config: Object) => {
const instance = axios.create({
baseURL: process.env.VUE_APP_BASE_PLAPI,
timeout: 900000,
});
instance.interceptors.request.use(
(config) => {
if (config.method === "get") {
config.url = config.url + "?" + config.data;
}
if (sessionStorage.getItem("Authorization")) {
config.headers.Authorization =
"auth " + sessionStorage.getItem("Authorization");
}
// //console.log("請(qǐng)求攔截成功啦");
// //console.log(config);
return config;
},
(err) => {
console.log("請(qǐng)求失敗啦");
console.log(err);
}
);
//
instance.interceptors.response.use(
(res) => {
return res.data;
},
(err) => {
console.log("響應(yīng)失敗");
console.log(err);
// return err;
}
);
return instance(config);
};Instances下Instance2.ts代碼
import axios from "axios";
import qs from "qs";
export const Instance2 = (config: Object) => {
const instance = axios.create({
baseURL: process.env.VUE_APP_BASE_API,
timeout: 900000,
});
instance.interceptors.request.use(
(config) => {
if (config.method === "get") {
config.url = config.url + "?" + qs.stringify(config.data);
}
if (sessionStorage.getItem("Authorization")) {
config.headers.Authorization =
"auth " + sessionStorage.getItem("Authorization");
}
// //console.log("請(qǐng)求攔截成功啦");
// //console.log(config);
return config;
},
(err) => {
console.log("請(qǐng)求失敗啦");
console.log(err);
}
);
//
instance.interceptors.response.use(
(res) => {
return res.data;
},
(err) => {
console.log("響應(yīng)失敗");
console.log(err);
// return err;
}
);
return instance(config);
};Instances下index.ts代碼
import { Instance1 } from "@/network/Instances/Instance1";
import { Instance2 } from "@/network/Instances/Instance2";
export { Instance1, Instance2 };networt中api.ts代碼
import { Instance1, Instance2 } from "@/network/Instances";
export const Chen = (value: any) => {
return Instance1({
url: "/chen",
method: "post",
// data: value, //傳參方式一:缺點(diǎn)(如果這個(gè)接口在很多地方進(jìn)行了調(diào)用,修改參數(shù)了,我們需要修改很多的地方)
data: { password, account, code } //傳參方式二:推薦傳參方法,可以更好的維護(hù)
});
};
export const Login2 = (value: any) => {
return Instance2({
url: "/login",
method: "post",
data: value,
});
};在根目錄下新建vue.config.js
(和package.json同級(jí)),代碼如下
module.exports = {
// 打包的時(shí)候去掉.map文件
productionSourceMap: false,
devServer: {
proxy: {
"/api": {
target: process.env.VUE_APP_BASE_URL,
changeOrigin: true,
ws: true,
pathRewrite: {
"^/api": process.env.VUE_APP_BASE_URL + process.env.VUE_APP_BASE_API
},
},
"/chen": {
target: process.env.VUE_APP_BASE_PL,
changeOrigin: true,
ws: true,
pathRewrite: {
"^/chen": process.env.VUE_APP_BASE_PL
},
},
}
},
chainWebpack: (config) => {
// 開(kāi)啟eslint自動(dòng)修復(fù),關(guān)鍵代碼
config.module
.rule("eslint")
.use("eslint-loader")
.loader("eslint-loader")
.tap((options) => {
options.fix = true;
return options;
});
},
};請(qǐng)求結(jié)果如下:


本地的分享到了這里就結(jié)束啦,希望對(duì)你有所幫助,讓我們一起努力走向巔峰,更多關(guān)于axios模塊化封裝(實(shí)例化)和vue本地解決跨域的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
vue多次打包后出現(xiàn)瀏覽器緩存的問(wèn)題及解決
這篇文章主要介紹了vue多次打包后出現(xiàn)瀏覽器緩存的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08
vue父子組件動(dòng)態(tài)傳值的幾種方式及注意問(wèn)題詳解
這篇文章主要介紹了vue父子組件動(dòng)態(tài)傳值的幾種方式及注意問(wèn)題詳解,需要的朋友可以參考下2022-12-12
徹底搞懂并解決vue-cli4中圖片顯示的問(wèn)題實(shí)現(xiàn)
這篇文章主要介紹了徹底搞懂并解決vue-cli4中圖片顯示的問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08
Vue 開(kāi)發(fā)必須知道的36個(gè)技巧(小結(jié))
這篇文章主要介紹了Vue 開(kāi)發(fā)必須知道的36個(gè)技巧(小結(jié)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10
vue如何通過(guò)$router.push傳參數(shù)
這篇文章主要介紹了vue如何通過(guò)$router.push傳參數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06
vue element實(shí)現(xiàn)表格合并行數(shù)據(jù)
這篇文章主要為大家詳細(xì)介紹了vue element實(shí)現(xiàn)表格合并行數(shù)據(jù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-11-11
Vue3除了keep-alive還有哪些實(shí)現(xiàn)頁(yè)面緩存詳解
Vue3中的keep-alive組件用于緩存頁(yè)面,以便在切換頁(yè)面時(shí)保留其狀態(tài),下面這篇文章主要給大家介紹了關(guān)于Vue3除了keep-alive還有哪些實(shí)現(xiàn)頁(yè)面緩存的相關(guān)資料,需要的朋友可以參考下2024-04-04
Vue項(xiàng)目中props傳值時(shí)子組件檢測(cè)不到的問(wèn)題及解決
這篇文章主要介紹了Vue項(xiàng)目中props傳值時(shí)子組件檢測(cè)不到的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08

