费话不多说,直接上代码,有什么不明白或是错误的地方可以在评论中指出。
import axios from 'axios'
import qs from "qs"
import Vue from "vue"
let VUE = new Vue();
let baseURL = '';
console.log(axios)
// 设置本地dev环境的baseURL,用于本地web服务器的代理的拦截名
if (process.env.NODE_ENV === 'development') {
baseURL = './PB_API';
}
// 设置线上环境的baseURL
if (process.env.NODE_ENV === 'production') {
baseURL = document.location.protocol + '//' + location.host + location.pathname + 'PBServerAPI/'; // 正式环境
}
const service = axios.create({
baseURL: baseURL,
timeout: 60000, //响应时长可根据业务需求自行设置
responseType: "json",//请求数据类型包括 'arraybuffer', 'blob', 'document', 'json', 'text', 'stream'
withCredentials: false,//表示跨域请求时是否需要使用凭证,是true的时候,开启withCredentials后,服务器才能拿到你的cookie,当然后端服务器也要设置允许你获取你开启了才有用
headers: {
'Content-Type': 'application/json'
}
})
//请求拦截器
service.interceptors.request.use(config => {
// config.headers.Authorization = "Bearer " + store.state.token
if (config.headers.contentType === 'code') {
// form表单格式提交需要qs处理下请求参数
config.headers['Content-Type'] = 'application/x-www-form-urlencoded'
config.data = qs.stringify(config.data)
} else {
}
if (config.method == 'get') {
// get请求加上时间戳
config.params = {
_t: Date.parse(new Date()) / 1000,
...config.params
}
}
return config
}, error => {
return Promise.reject(error)
});
//响应拦截器
service.interceptors.response.use(response => {
if (response.status === 200) {
return response.data
}
}, error => {
if (error.response.data.code == 500) {
VUE.$message({
type: 'error',
message: error.response.data.message
})
}
return Promise.reject(error)
})
export default service