安装axios
npm install axios -s
vue项目根目录新建 until/request/index.js
复制以下内容
import axios from "axios";
import QS from "qs"; // 引入qs模块,为post型数据提供序列化
import store from "../../store/index";
import router from "./router";
// 设置请求超时
const Axios = axios.create({
baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url
timeout: 5000, // 请求倒计时
});
// 请求拦截器
Axios.interceptors.request.use(
(config) => {
const token = store.state.token;// 从vuex获取时效令牌token
// token && (config.headers.Authorization = token || '');
config.headers.Authorization = token || "";
return config;
},
(error) => {
return Promise.error(error);
}
);
// 响应拦截器
Axios.interceptors.response.use(
(response) => {
if (response.status === 200) {
return Promise.resolve(response);
} else {
return Promise.reject(response);
}
},
(error) => {
if (error.response.status) {
switch (error.response.status) {
//请求返回的错误码需要与后台开发人员协商好,以便更快的定位错误。
case 401: //用户未登录
router.replace({
path: "/login",
query: {
redirect: router.currentRoute.fullPath,
},
});
break;
case 403: //token过期
this.$message.warning("登录已过期,请重新登录");
localStorage.removeItem("token");
// store.commit('loginSuccess', null);
setTimeout(() => {
router.replace({
path: "/login",
query: {
redirect: router.currentRoute.fullPath,
},
});
}, 1000);
break;
case 404: //请求错误
this.$message.warning("该请求不存在");
break;
default: // 其它错误,直接抛出错误提示
this.$message.warning(error.response.data.message);
}
return Promise.reject(error.response);
}
}
);
// get请求
const get = (url, params) => {
return new Promise((resolve, reject) => {
Axios.get(url, {
params: params,
})
.then((res) => {
resolve(res.data);
})
.catch((err) => {
reject(err.data);
});
});
};
// post 请求
const post = (url, params) => {
return new Promise((resolve, reject) => {
Axios.post(url, QS.stringify(params))
.then((res) => {
resolve(res.data);
})
.catch((err) => {
reject(err.data);
});
});
};
export default {
get,
post,
};
新建api文件夹,根据业务建立不同模块的请求文件
import request from "../utils/request/index";
// 获取列表
export function getList() {
return request.get("/posts");
}
注意:process.env.VUE_APP_BASE_API在vue根目录配置
内容如下
ENV = 'development'
# base api
VUE_APP_BASE_API = 'https://jsonplaceholder.typicode.com' // 请求地址