开箱即用的简易封装axios
import axios from 'axios'
import { BASE_URL } from '@/assets/url/urls'
let services
let newServices
let serviceInit
<!--混入所有接口都需要的公共参数-->
let publicParams = {}
function httpService (service, contentType) {
service.interceptors.request.use(
request => {
if (request.method === 'get') {
request.params = {
...publicParams,
...request.params,
<!--ie兼容处理-->
t: Date.now()
}
}
if (request.method === 'post' && contentType !== 'multipart/form-data;charset=UTF-8') {
request.data = {
...publicParams,
...request.data
}
}
return request
},
error => {
console.error('Request Error: ' + error)
return Promise.reject(error)
}
)
service.interceptors.response.use(
response => {
let body = response.data
if (body.code && body.code !== '200') {
console.error(body.msg)
}
if (body.code === '2xx') {
if (process.env.NODE_ENV === 'development') {
alert('登录失效')
} else {
window.location.href = body.data
}
}
return body
},
error => {
console.error('Response Error: ' + error)
return Promise.reject(error)
}
)
}
function createService (axiosConfig = {}, baseUrl = BASE_URL, headers = {}) {
if (process.env.NODE_ENV === 'development') {
let paramsInStorage = localStorage.getItem('accountParams')
if (paramsInStorage) {
publicParams = JSON.parse(paramsInStorage)
}
}
let params = {
baseURL: baseUrl,
timeout: 60000,
headers: {
'X-Requested-With': 'XMLHttpRequest',
...publicParams,
...headers
},
...axiosConfig
}
window.location.hostname === 'localhost' &&
(params.headers.someMessage = publicParams.someAccount || '')
const service = axios.create(params)
httpService(service, headers['Content-Type'])
return service
}
function initPublicParams (params = {}) {
if (process.env.NODE_ENV === 'development') {
let paramsInStorage = localStorage.getItem('accountParams')
if (paramsInStorage) {
params = JSON.parse(paramsInStorage)
}
}
publicParams = params
services = createService()
<!--差异化处理部分后台需求-->
newServices = createService({}, '/aaa/bbb')
}
serviceInit = createService()
export {
serviceInit,
services,
newServices,
initPublicParams
}