Axios
安装
yarn add axios -S
请求服务封装
import axios from 'axios'
let cancel ,promiseArr = {}
const CancelToken = axios.CancelToken;
axios.interceptors.request.use(config => {
if (promiseArr[config.url]) {
promiseArr[config.url]('操作取消')
promiseArr[config.url] = cancel
} else {
promiseArr[config.url] = cancel
}
return config
}, error => {
return Promise.reject(error)
})
axios.interceptors.response.use(
response => {
return response.data
},
err => {
if (err && err.response) {
switch (err.response.status) {
case 400:
err.message = '错误请求'
break;
case 401:
err.message = '未授权,请重新登录'
break;
case 403:
err.message = '拒绝访问'
break;
case 404:
err.message = '请求错误,未找到该资源'
break;
case 405:
err.message = '请求方法未允许'
break;
case 408:
err.message = '请求超时'
break;
case 500:
err.message = '服务器端出错'
break;
case 501:
err.message = '网络未实现'
break;
case 502:
err.message = '网络错误'
break;
case 503:
err.message = '服务不可用'
break;
case 504:
err.message = '网络超时'
break;
case 505:
err.message = 'http版本不支持该请求'
break;
default:
err.message = `连接错误${err.response.status}`
}
} else {
err.message = "连接到服务器失败"
}
console.log(err.message)
return Promise.resolve(err.response)
}
)
axios.defaults.baseURL = '/api'
axios.defaults.headers = {
'X-Requested-With': 'XMLHttpRequest'
}
axios.defaults.timeout = 10000
let GET = (data = {}) => {
return new Promise((resolve,reject) => {
axios({
method: 'get',
url:data.url,
params: data.params,
cancelToken: new CancelToken(c => {
cancel = c
})
}).then(res => {
resolve(res)
})
})
}
let POST = (data = {}) =>
{
return new Promise((resolve,reject) => {
axios({
method: 'post',
url:data.url,
data:data.params,
cancelToken: new CancelToken(c => {
cancel = c
})
}).then(res => {
resolve(res)
})
})
}
let UPLOAD = (data = {}) =>
{
var RequestData = new FormData()
if(JSON.stringify(data.params) !== "{}")
{
for(var key in data.params)
{
RequestData.append(key, data.params[key])
}
}
return new Promise((resolve,reject) => {
axios({
method: 'post',
url:data.url,
data:RequestData,
headers:{'Content-Type': 'multipart/form-data'},
cancelToken: new CancelToken(c => {
cancel = c
})
}).then(res => {
resolve(res)
})
})
}
export {
GET,
POST,
UPLOAD
}
总入口文件
const ModulesFile = require.context('./',true,/index.js$/)
var ApiList = {}
ModulesFile.keys().reduce((modules, modulePath) => {
const ModuleName = modulePath.replace(/^.\/(.*)\.js/,'$1')
if(ModuleName !== 'index')
{
const ModuleList = ModulesFile(modulePath)
ApiList = Object.assign(ApiList,ModuleList.default)
}
return ApiList
}, {})
export default ApiList
文件的PAI
import { POST, UPLOAD } from '@/services/request.js'
const base = {
register(data = {})
{
return POST({
url: '/user/base/register',
params: data
})
},
login(data = {})
{
return POST({
url: '/user/base/login',
params: data
})
}
}
export default base
定义全局API变量
import api from './api/index.js'
React.$api = api
在业务中使用
var data = {
email: '123123@qq.com',
password: 123123
}
const logins = async() => {
var result = await React.$api.login(data)
}