axios.ts
javascript;gutter:true;
// 引入网络请求库 https://github.com/axios/axios</p>
<p>import axios from 'axios'
import { message } from 'choerodon-ui';
// import store from '../store'
// import router from '../router'</p>
<p>// 请求列表
const requestList: any = []
// 取消列表
const CancelToken = axios.CancelToken
let sources: any = {}</p>
<p>// axios.defaults.timeout = 10000
axios.defaults.headers.post['Content-Type'] = 'application/json;charset=UTF-8'</p>
<p>axios.defaults.baseURL = process.env.BASE_URL || 'http://localhost:7001/'</p>
<p>axios.interceptors.request.use((config) => {
const request = JSON.stringify(config.url) + JSON.stringify(config.data)</p>
<p>config.cancelToken = new CancelToken((cancel) => {
sources[request] = cancel
})</p>
<p>if(requestList.includes(request)){
sources<a href="" title="取消重复请求">request</a>
}else{
requestList.push(request)
// store.dispatch('changeGlobalState', {loading: true})
}</p>
<p>// const token = store.getters.userInfo.token
// if (token) {
// config.headers.token = token
// }</p>
<p>return config
}, function (error) {
return Promise.reject(error)
})</p>
<p>axios.interceptors.response.use(function (response) {
const request = JSON.stringify(response.config.url) + JSON.stringify(response.config.data)
requestList.splice(requestList.findIndex((item: any) => item === request), 1)
if (requestList.length === 0) {
// store.dispatch('changeGlobalState', {loading: false})
}
if (response.data.code === 900401) {
message.error('认证失效,请重新登录!', 1000)
// router.push('/login')
}
return response
}, function (error) {
if (axios.isCancel(error)) {
requestList.length = 0
// store.dispatch('changeGlobalState', {loading: false})
throw new axios.Cancel('cancel request')
} else {
message.error('网络请求失败', 1000)
}
return Promise.reject(error)
})</p>
<p>const request = function (url: any, params: any, config: any, method: string) {
return new Promise((resolve, reject) => {
// @ts-ignore
axios<a href="url, params, Object.assign({}, config)">method</a>.then((response: any) => {
resolve(response.data)
}, (err: any) => {
if (err.Cancel) {
console.log(err)
} else {
reject(err)
}
}).catch((err: any) => {
reject(err)
})
})
}</p>
<p>const post = (url: any, params: any, config = {}) => {
return request(url, params, config, 'post')
}</p>
<p>const get = (url: any, params: any, config = {}) => {
return request(url, params, config, 'get')
}</p>
<p>export {sources, post, get}
.
Original: https://www.cnblogs.com/crazycode2/p/16449127.html
Author: 每天都要进步一点点
Title: axios 封装
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/545630/
转载文章受原作者版权保护。转载请注明原作者出处!