在使用之前,先了解一下什么是axios
axios 參考鏈接 http://www.axios-js.com/zh-cn/docs/
具體步驟
1.安裝axiso
npm install axios
2.在全局注冊(main.js)

3.新建一個文件夾 (我這里叫req),新建兩個js文件(我這里是index.js dq.js)
index.js 用於對axios 進行一些初始化操作
dq.js 用於統一寫請求

3.1 對axios 進行初始化操作
引入 import axios from "axios";
創建axios 實例
const service = axios.create({
baseURL: "http://172.16.227.12:808", // api的base_url
timeout: 10000 // 請求超時時間
// transformRequest: data => qs.stringify(data)
});
錯誤情況下的處理
const err = error => {
if (error.response) {
const data = error.response.data;
// const token = localStorage.getItem("token");
if (error.response.status === 403) {
ElementUI.Message({
message: "提示信息",
type: "warning"
});
}
if (
error.response.status === 401 &&
!(data.result && data.result.isLogin)
) {
ElementUI.Message({
message: "提示信息",
type: "warning"
});
}
}
return Promise.reject(error);
};
請求攔截
// response interceptor 請求攔截
service.interceptors.request.use(function(config) {
console.log("采用了請求攔截", config, localStorage.getItem("token"));
if (localStorage.getItem("token") === null) {
// 寫你的邏輯
//此時為空 未登錄
config.data = JSON.stringify(config.data);
router.push("/login").catch(() => {});
return config;
} else {
config.headers["Authorization"] = "Bearer " + localStorage.getItem("token"); // 請求頭攜帶token token暫時用h5存儲
return config; // 必須要返回 否則會報錯
}
}, err);
響應攔截
// 響應攔截器 這里的狀態碼是后端返回給你的
axios.interceptors.response.use(
response => {
if (response.status === 200) {
return Promise.resolve(response);
} else {
return Promise.reject(response);
}
},
// 服務器狀態碼不是200的情況
error => {
return Promise.reject(error.response);
}
);
最后一定要暴露出去
export default service; // 暴露出去給統一寫請求的用 (在我這里是dq.js)
3.2統一寫請求api dq.js
// 請求統一在這里 每一個都暴露出去,在需要用的地方調用
import axios from "./index"; // 將處理好的axios拿來用
const url =
"https://www.fastmock.site/mock/5840ace5ee7fd2dd081accc891d1e7a0/test1";
const urlapi = "http://172.16.227.12:8088";
// 登錄
export const Login = params =>
axios({
url: url + "/login",
method: "get",
params: params
});
// 添加菜單
export const AddMenu = params =>
axios({
url: urlapi + "/role/addMenu",
method: "get",
params: params
});
4.調用獲取數據
在要用的地方引入
import { getPermissionList, AddMenu } from "@/req/dq.js";
在下方使用 例如AddMenu
EditSubmit() {
console.log(this.ruleForm);
// this.ruleForm = {};
this.DialogEditVisible = false;
AddMenu({
Url: this.ruleForm.Url,
// parentName: this.ruleForm.parentName,
menuName: this.ruleForm.menuName,
parentId: this.ruleForm.parentId
}).then(res => {
console.log(res);
});
},
最后附上 axiso 初始化的 index.js 具體還可以對其做其他操作 參考鏈接 http://www.axios-js.com/zh-cn/docs/
import axios from "axios";
import router from "../router";
import ElementUI from "element-ui"; // 提示信息根據你的Ui來定
axios.defaults.headers["Content-Type"] = "application/json;charset=utf-8";
// 創建axios實例
const service = axios.create({
baseURL: "http://172.16.227.12:808", // api的base_url
timeout: 10000 // 請求超時時間
// transformRequest: data => qs.stringify(data)
});
// error 情況下
const err = error => {
if (error.response) {
const data = error.response.data;
// const token = localStorage.getItem("token");
if (error.response.status === 403) {
ElementUI.Message({
message: "提示信息",
type: "warning"
});
}
if (
error.response.status === 401 &&
!(data.result && data.result.isLogin)
) {
ElementUI.Message({
message: "提示信息",
type: "warning"
});
}
}
return Promise.reject(error);
};
// response interceptor 請求攔截
service.interceptors.request.use(function(config) {
console.log("采用了請求攔截", config, localStorage.getItem("token"));
if (localStorage.getItem("token") === null) {
// 寫你的邏輯
//此時為空 未登錄
config.data = JSON.stringify(config.data);
router.push("/login").catch(() => {});
return config;
} else {
config.headers["Authorization"] = "Bearer " + localStorage.getItem("token"); // 請求頭攜帶token token暫時用h5存儲
return config; // 必須要返回 否則會報錯
}
}, err);
// 響應攔截器 這里的狀態碼是后端返回給你的
axios.interceptors.response.use(
response => {
if (response.status === 200) {
return Promise.resolve(response);
} else {
return Promise.reject(response);
}
},
// 服務器狀態碼不是200的情況
error => {
return Promise.reject(error.response);
}
);
export default service; // 暴露出去給統一寫請求的用 (在我這里是dq.js)
