¶Ô±ÈÐÂÎļþ |
| | |
| | | /** |
| | | * å
¨ç«httpé
ç½® |
| | | * |
| | | * axiosåæ°è¯´æ |
| | | * isSerializeæ¯å¦å¼å¯form表åæäº¤ |
| | | * isTokenæ¯å¦éè¦token |
| | | */ |
| | | import axios from 'axios'; |
| | | import store from '@/store/'; |
| | | import router from '@/router/router'; |
| | | import {serialize} from '@/util/util'; |
| | | import {getToken} from '@/util/auth'; |
| | | import {Message} from 'element-ui'; |
| | | import website from '@/config/website'; |
| | | import {Base64} from 'js-base64'; |
| | | import NProgress from 'nprogress'; |
| | | import 'nprogress/nprogress.css'; |
| | | |
| | | //é»è®¤è¶
æ¶æ¶é´ |
| | | axios.defaults.timeout = 10000; |
| | | //è¿åå
¶ä»ç¶æç |
| | | 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(); |
| | | //headers夿æ¯å¦éè¦ |
| | | const authorization = config.authorization === false; |
| | | if (!authorization) { |
| | | config.headers['Authorization'] = `Basic ${Base64.encode(`${website.clientId}:${website.clientSecret}`)}`; |
| | | } |
| | | //让æ¯ä¸ªè¯·æ±æºå¸¦token |
| | | const meta = (config.meta || {}); |
| | | const isToken = meta.isToken === false; |
| | | if (getToken() && !isToken) { |
| | | config.headers[website.tokenHeader] = 'bearer ' + getToken() |
| | | } |
| | | //headersä¸é
ç½®textè¯·æ± |
| | | if (config.text === true) { |
| | | config.headers["Content-Type"] = "text/plain"; |
| | | } |
| | | //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'})); |
| | | // å¦æè¯·æ±ä¸ºé200å¦è
é»è®¤ç»ä¸å¤ç |
| | | if (status !== 200) { |
| | | Message({ |
| | | message: message, |
| | | type: 'error' |
| | | }); |
| | | return Promise.reject(new Error(message)) |
| | | } |
| | | return res; |
| | | }, error => { |
| | | NProgress.done(); |
| | | return Promise.reject(new Error(error)); |
| | | }); |
| | | |
| | | export default axios; |