我做vue和react的项目都是用的这一套api(时间戳是我新加的),接口,方法分开,便于管理。
sever.js
import axios from 'axios'
import qs from 'qs'
/**
* 自定义实例默认值
*/
const instance = axios.create({
timeout: 15000, // 请求超时时间
withCredentials: true
})
/**
* 添加请求拦截器 ,意思就是发起请求接口之前做什么事,一般都会发起加载一个loading
*/
instance.interceptors.request.use(
config => {
//添加时间戳,防止页面缓存
if (config.method == 'post') {
config.data = {
...config.data,
_t: Date.parse(new Date()) / 1000
}
} else if (config.method == 'get') {
config.params = {
_t: Date.parse(new Date()) / 1000,
...config.params
}
}
return config
},
error => {
// 对请求错误做些什么,处理这个错误
// 可以直接处理或者展示出去,toast show()
console.warn(error)
return Promise.reject(error)
}
)
/**
* 添加响应拦截器
*/
instance.interceptors.response.use(
response => {
let res = response.data
return res
},
error => {
return Promise.reject(error)
}
)
/**
* 使用es6中的类,进行简单封装
*/
class ajaxhttp {
// 使用async ... await
static async get (url, params) {
// eslint-disable-next-line no-return-await
return await instance.get(url, {
params: params
})
}
static async post (url, params) {
// eslint-disable-next-line no-return-await
return await instance.post(url, qs.stringify(params))
}
static async fliePost (url, params) {
// eslint-disable-next-line no-return-await
return await instance.post(url, params)
}
}
export default ajaxhttp
port.js
/**
* 统一定义接口,有利于维护
* 不同环境配置不同的地址
*/
let HISTORY = 'http://118.24.43.196:9999/api'
const PORTS = {
getHomeInfo: HISTORY + '/index/contents'
}
export default PORTS
api.js
import ajaxhttp from './server'
import ports from './ports'
// 获取获取首页所有二级分类,和分类第一屏的内容
export const getHomeInfo = (params) => ajaxhttp.get(ports.getHomeInfo, params)