封装一个 axios
当 withCredentials = true
时必须在后端增加 response
头信息 Access-Control-Allow-Origin
,且必须指定域名,而不能指定为 *
import axios from 'axios'
import { Message } from 'element-ui'
const http = axios.create({
timeout: 1000 * 120,
withCredentials: true,
headers: {
'Content-Type': 'application/json; charset=utf-8'
}
})
function EipException(message, code) {
this.msg = message
this.code = code
}
http.interceptors.request.use(config => {
config.headers['token'] = getToken()
return config
}, error => {
return Promise.reject(error)
})
export function get(url, params = {}) {
return new Promise((resolve, reject) => {
http.get(url, {
params: {...params, _t: new Date().getTime()}
}).then(response => {
resolve(response.data)
}).catch(err => {
reject(err)
})
})
}
export function post(url, data = {}) {
data = JSON.stringify(data)
return new Promise((resolve, reject) => {
http.post(url, data).then(response => {
resolve(response.data)
}).catch(err => {
reject(err)
})
})
}
export function del(url, data = {}) {
data = JSON.stringify(data)
return new Promise((resolve, reject) => {
http.delete(url, data).then(response => {
resolve(response.data)
}).catch(err => {
reject(err)
})
})
}
export function put(url, data = {}) {
data = JSON.stringify(data)
return new Promise((resolve, reject) => {
http.put(url, data).then(response => {
resolve(response.data)
}).catch(err => {
reject(err)
})
})
}
http.interceptors.response.use(response => {
const res = response.data
if (res && res.code !== 200) {
Message({
message: response.data.msg || 'error',
type: 'error',
duration: 5 * 1000
})
throw new EipException(response.data.msg, response.data.code)
} else {
return res
}
}, error => {
if (error.message && error.message === 'Network Error') {
Message({
message: `服务无法访问,请确定当前终端是否能够访问`,
type: 'error',
duration: 5 * 1000
})
return Promise.reject(error)
} else {
Message({
message: '接口无法访问',
type: 'error',
duration: 5 * 1000
})
}
return Promise.reject(error)
})