48 lines
1.2 KiB
TypeScript
48 lines
1.2 KiB
TypeScript
import { Dispatch } from 'react'
|
|
import axios from 'axios'
|
|
// import { clearUserInfo } from 'state/actions'
|
|
|
|
// create an axios instance
|
|
const request = axios.create({
|
|
baseURL: process.env.REACT_APP_REQUEST_URL,
|
|
timeout: 10000, // request timeout
|
|
})
|
|
let hasInit = false
|
|
export const initAxios = (dispatch: Dispatch<any>, toast) => {
|
|
if (hasInit) return
|
|
hasInit = true
|
|
// request interceptor
|
|
request.interceptors.request.use(
|
|
(memo: any) => {
|
|
// do something before request is sent
|
|
|
|
memo.headers.token = localStorage.getItem('token')
|
|
return memo
|
|
},
|
|
(error) => {
|
|
return Promise.reject(error)
|
|
},
|
|
)
|
|
// response interceptor
|
|
request.interceptors.response.use(
|
|
(response) => {
|
|
const res: any = response.data
|
|
if (res.code !== 200) {
|
|
if (res.code === 401) {
|
|
// dispatch(clearUserInfo())
|
|
toast.toastError('Login expiration')
|
|
return Promise.reject(new Error('Login expiration'))
|
|
}
|
|
toast.toastError(res.msg)
|
|
return Promise.reject(res.msg || 'Error')
|
|
}
|
|
return res.data
|
|
},
|
|
(error) => {
|
|
return Promise.reject(error)
|
|
},
|
|
)
|
|
}
|
|
|
|
export default request
|