123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- import axios from 'axios';
- import {Base64} from 'js-base64';
- import website from '~src/config';
- import router from '~src/router/index';
- import {getToken} from '~src/api/util/auth';
- import {toSerialize} from "vue-utils-plus"
- //默认超时时间
- axios.defaults.timeout = 20000;
- //返回其他状态码
- axios.defaults.validateStatus = function (status) {
- return status >= 200 && status <= 500;
- };
- //跨域请求,允许保存cookie
- axios.defaults.withCredentials = true;
- //http request拦截
- axios.interceptors.request.use(config => {
- const meta = (config['meta'] || {});
- const isToken = meta['isToken'] === false;
- config.headers['Authorization'] = `Basic ${Base64.encode(`${website.clientId}:${website.clientSecret}`)}`;
- //让每个请求携带token
- const token = getToken()
- if (token && !isToken) {
- config.headers[website.tokenHeader] = 'bearer ' + token
- }
- //headers中配置text请求
- if (config['text'] === true) {
- config.headers["Content-Type"] = "text/plain";
- }
- //headers中配置serialize为true开启序列化
- if (config.method === 'post' && meta['isSerialize'] === true) {
- config.data = toSerialize(config.data);
- }
- return config
- }, error => {
- return Promise.reject(error)
- });
- //http response 拦截
- axios.interceptors.response.use(res => {
- //获取状态码
- const status = res.data?.code || res.status;
- const message = res.data?.msg || res.data['error_description'] || '未知错误';
- //如果是401则跳转到登录页面
- if (status === 401) {
- window.$message?.error(message || '身份失效!');
- router.push({path: '/login'})
- }
- // 如果请求为非200, 自行catch逻辑处理
- if (status !== 200) {
- return Promise.reject(res);
- }
- return res;
- }, error => {
- window.$message?.error('请求异常!');
- return Promise.reject(new Error(error));
- });
- export default axios;
|