Files
cmanager/src/router/axios.js
2024-02-02 15:04:47 +08:00

86 lines
2.8 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 全站http配置
*
* axios参数说明
* isSerialize是否开启form表单提交
* isToken是否需要token
*/
import 'nprogress/nprogress.css';
import website from '@/config/website';
import router from '@/router/router';
import store from '@/store/';
import {getToken} from '@/util/auth';
import {serialize} from '@/util/util';
import axios from 'axios';
import {Message} from 'element-ui';
import {Base64} from 'js-base64';
import NProgress from 'nprogress';
//默认超时时间
axios.defaults.timeout = 60000;
//返回其他状态码
axios.defaults.validateStatus = function(status) {
return status >= 200 && status <= 500;
};
//跨域请求允许保存cookie
axios.defaults.withCredentials = true;
// NProgress 配置
NProgress.configure({showSpinner: false});
// http request拦截
axios.interceptors.request.use(config => {
//开启 progress bar
NProgress.start();
const meta = (config.meta || {});
const isToken = meta.isToken === false;
config.headers['Authorization'] =
`Basic ${Base64.encode(`${website.clientId}:${website.clientSecret}`)}`;
if (getToken() && !isToken) {
//让每个请求携带token--['Authorization']为自定义key 请根据实际情况自行修改
config.headers['Jobslink-Auth'] = 'bearer ' + getToken()
}
// headers中配置serialize为true开启序列化
if (config.method === 'post' && meta.isSerialize === true) {
config.data = serialize(config.data);
}
return config
}, error => {return Promise.reject(error)});
// http response 拦截
axios.interceptors.response.use(
res => {
//关闭 progress bar
NProgress.done();
//获取状态码
const status = res.data.code || res.status;
const statusWhiteList = website.statusWhiteList || [];
const message = res.data.msg || res.data.error_description || '未知错误';
//如果在白名单里则自行catch逻辑处理
if (statusWhiteList.includes(status)) return Promise.reject(res);
//如果是401则跳转到登录页面
if (status === 401)
store.dispatch('FedLogOut').then(() => router.push({path: '/login'}));
// 如果请求为500统一处理
const err = new Error(message)
err.response = res
err.status = status
if (message.length > 100) {
Message({message: '系统繁忙', type: 'error'});
return Promise.reject(err)
}
// 如果请求为非200否者默认统一处理
if (status !== 200) {
Message({message: message, type: 'error'});
return Promise.reject(err, res)
}
return res;
},
error => {
NProgress.done();
if (error.message.includes('timeout')) {
Message({message: '请求超时', type: 'error'});
}
return Promise.reject(new Error(error), error);
});
export default axios;