import axios from ‘axios‘
import store from ‘../store/index‘
const rootUrl =process.env.API_ROOT//创建axios实例
const service =axios.create({
timeout:30000 //超时时间
})//添加request拦截器
service.interceptors.request.use(config =>{if (Object.keys(config.headers).length > 0) {
}//console.log(‘headers‘ + config.headers)
returnconfig
}, error=>{
Promise.reject(error)
})//添加response拦截器
service.interceptors.response.use(
response=>{
let res={}
res.status=response.status
res.data=response.data
res.headers=response.headers//console.log(‘####‘ + JSON.stringify(response.data))
returnres
},
error=>{if (error.response && error.response.status === 404) {
console.log(‘404错误‘)
}returnPromise.reject(error.response)
}
)//封装get接口//params={} 是设置默认值
export function get(url, params = {}, header ={}) {
params.t= new Date().getTime() //get方法加一个时间参数,解决ie下可能缓存问题.
returnservice({
url: url,
method:‘get‘,
headers: header,
params
})
}//封装post请求
export function post(url, data = {}, header ={}) {//默认配置
let sendObject ={
url: url,
method:‘post‘,
headers: header,
data: data
}
sendObject.data=JSON.stringify(data)returnservice(sendObject)
}//封装put方法 (resfulAPI常用)
function put(url, data = {}, header ={}) {returnservice({
url: url,
method:‘put‘,
headers: header,
data: JSON.stringify(data)
})
}//删除方法(resfulAPI常用)
function deletes(url, header ={}) {returnservice({
url: url,
method:‘delete‘,
headers: header
})
}//patch方法(resfulAPI常用)
function patch(url, header ={}) {returnservice({
url: url,
method:‘patch‘,
headers: header
})
}//处理格式化URL(/demo/{id})
function render(url, data) {
var re= /{([^]+)?}/var match= ‘‘
while ((match =re.exec(url))) {
url= url.replace(match[0], data[match[1]])
}returnurl
}const fetch = (options) =>{
let url=options.url
url=render(url, options.data)switch(options.method.toUpperCase()) {case ‘GET‘:returnget(url, options.data, options.header)case ‘POST‘:returnpost(url, options.data, options.header)case ‘PUT‘:returnput(url, options.data, options.header)case ‘DELETE‘:returndeletes(url, options.data, options.header)case ‘PATCH‘:returnpatch(url, options.data, options.header)default:returnservice(options)
}
}/*** 提供一个http方法
* url 访问路径 不包括域名和项目名
* data 参数对象
* method 请求方式
**/export function httpApiTools(url= ‘‘, body = {}, header = {}, method = ‘GET‘) {
var newUrl= rootUrl +urlif (Object.keys(store.state.serverConfig).length > 0) {//上线后修改配置
console.log(‘store.state.serverConfig:‘ +store.state.serverConfig)
newUrl= store.state.serverConfig +url
}else{//上线前多服务器环境切换
console.log(‘store.state.serverConfig:‘ +store.state.serverConfig)
newUrl= rootUrl +url
}
console.log(‘请求路径:‘ +newUrl)const options ={
url: newUrl,
data: body,
header: header,
method: method
}return fetch(options).catch(error =>{
console.log(error)throwerror
})
}/*** 构造url的方法*/export function getUrl(url= ‘‘) {//process.env.VUE_APP_PATH为环境变量在.env文件中配置
return process.env.VUE_APP_PATH +url
}