123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- import axios from 'axios'
- import store from '@/store'
- import router from '../router'
- import Vue from 'vue'
- let vue = new Vue()
- // import qs from 'qs'
- const exceptUrls = ['/sso/user/logout', '/sso/user/sendUserInfo', '/user/order/queryOrderStatus', '/user/checkToken']
- axios.defaults.baseURL = process.env.NODE_ENV === 'development' ? 'https://www.4dkankan.com/api' : '/api'
- // axios.defaults.baseURL = process.env.NODE_ENV === 'development' ? 'http://192.168.0.207:8087/api' : '/api'
- // 请求超时时限
- axios.defaults.timeout = 1500000
- // 请求次数
- axios.defaults.retry = 2
- // 请求的间隙
- axios.defaults.retryDelay = 1000
- // 拦截请求,做登陆,或head处理
- axios.interceptors.request.use(function (config) {
- if (config.method === 'post') {
- config.data = {
- ...config.data,
- rnd: Math.random()
- }
- // config.data = qs.stringify(config.data)
- } else if (config.method === 'get') {
- config.params = {
- rnd: Math.random(),
- ...config.params
- }
- // config.params = qs.stringify(config.params)
- }
- for (let i = 0; i < exceptUrls.length; i++) {
- let url = exceptUrls[i]
- if (config.url === url) {
- return config
- }
- }
- // vue.$toast.showLoading()
- return config
- }, function (error) {
- // 对请求错误做些什么
- return Promise.reject(error)
- })
- // // 拦截返回,做错误统一处理
- axios.interceptors.response.use(
- response => {
- vue.$toast.hideLoading()
- let code = Number(response.data.code)
- for (let i = 0; i < exceptUrls.length; i++) {
- let url = response.config.baseURL + exceptUrls[i]
- if (response.config.url === url) {
- return response
- }
- }
- switch (code) {
- case 3004:
- let msg = localStorage.getItem('language') === 'en' ? 'Please re-log in.' : '请重新登录'
- store.state.user.token && vue.$toast.show('warn', msg, async () => {
- await store.dispatch('logout')
- router.push({name: 'home'})
- })
- break
- default:
- break
- }
- return response
- },
- error => {
- // 请求超时的之后,抛出 error.code = ECONNABORTED的错误..错误信息是 timeout of xxx ms exceeded
- let err = localStorage.getItem('language') === 'en' ? 'Network request failed' : '网络请求失败'
- if (error.code === 'ECONNABORTED' && error.message.indexOf('timeout') !== -1) {
- var config = error.config
- config.__retryCount = config.__retryCount || 0
- if (config.__retryCount >= config.retry) {
- // Reject with the error
- // window.location.reload();
- vue.$toast.show('error', err, function () {
- vue.$toast.hideLoading()
- })
- return Promise.reject(error)
- }
- // Increase the retry count
- config.__retryCount += 1
- // Create new promise to handle exponential backoff
- var backoff = new Promise(function (resolve) {
- setTimeout(function () {
- resolve()
- }, config.retryDelay || 1)
- })
- return backoff.then(function () {
- return axios(config)
- })
- } else {
- vue.$toast.show('error', err, function () {
- vue.$toast.hideLoading()
- })
- return Promise.reject(error)
- }
- }
- )
- export default axios
|