1.封装
import axios from 'axios'
import { message } from 'antd'
import * as qs from 'qs'
function toType(obj) {
return ({}).toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase()
}
function filterNull(o) {
Object.keys(o).forEach(key => {
if (o[key] === null) {
delete o[key]
}
if (toType(o[key]) === 'string') {
o[key] = o[key].trim()
} else if (toType(o[key]) === 'object') {
o[key] = filterNull(o[key])
} else if (toType(o[key]) === 'array') {
o[key] = filterNull(o[key])
}
})
return o
}
function apiAxios(method, url, params) {
if (params) {
params = filterNull(params)
}
return new Promise((resolve, reject) => {
axios.defaults.headers.common.Authorization = window.sessionStorage.token
axios.defaults.timeout = 10000;
axios({
method,
url,
data: method === 'POST' || method === 'PUT' ? params : null,
params: method === 'GET' || method === 'DELETE' || method === 'PATCH' ? params : null,
paramsSerializer: originParams => {
return qs.stringify(originParams, { indices: false })
},
withCredentials: true
})
.then((res) => {
if (res.status === 200) {
const data = res.data
resolve(data)
if (data.code === '200' || data.code === 200 || data.code === 'CODE_0000' || data.code === '201' || data.code === 201 || data.success) {
if (res.request.responseURL.indexOf('timeStamp=') > 0) {
const index = res.request.responseURL.indexOf('timeStamp=')
const timeStampTemp = res.request.responseURL.substring(index + 10)
let timeStamp
if (timeStampTemp.indexOf('&') > 0) {
timeStamp = timeStampTemp.substring(0, timeStampTemp.indexOf('&'))
} else {
timeStamp = timeStampTemp
}
data.timeStamp = Number(timeStamp)
}
resolve(data)
} else if (data.token_type === 'bearer') {
const storage = window.sessionStorage
storage.token = 'Bearer ' + data
} else if (data.data.code === 'login_error') {
message.error('登陆失败' + data.msg)
} else {
reject('服务器状态不对')
}
} else {
reject('Axios返回状态不对,查看请求处理过程....')
}
}, err => {
reject(err)
message.error('请求错误')
})
.catch((err) => {
const errInfo = { 'err': err.response }
reject(errInfo)
})
})
}
export default {
get: (url, params) => {
return apiAxios('GET', url, params)
},
post: (url, params) => {
return apiAxios('POST', url, params)
},
put: (url, params) => {
return apiAxios('PUT', url, params)
},
delete: (url, params) => {
return apiAxios('DELETE', url, params)
},
patch: (url, params) => {
return apiAxios('PATCH', url, params)
}
}
2.调用
import HttpClient from '@utils/HttpClient'
export function getAllFlagBuilding(params) {
return HttpClient.get(`/geoserver_cell/chengdu/ows`, params)
}