71 lines
1.8 KiB
TypeScript
71 lines
1.8 KiB
TypeScript
import axios, {AxiosError, AxiosRequestConfig, AxiosResponse} from "axios"
|
||
import useUserStore from "@/store/user";
|
||
|
||
const baseURl = process.env.NEXT_PUBLIC_API_URL as string
|
||
|
||
const service = axios.create({
|
||
baseURL: baseURl,
|
||
timeout: 30000
|
||
})
|
||
|
||
//请求拦截器
|
||
service.interceptors.request.use((config) => {
|
||
//
|
||
//当数据为formData,自动修改请求头
|
||
if ((config.data instanceof FormData)) {
|
||
(config as any).headers = {"Content-Type": "multipart/form-data"}
|
||
}
|
||
let token = useUserStore.getState().token
|
||
if (token) {
|
||
(config.headers).Authorization = `Bearer ${token}`
|
||
}
|
||
return config
|
||
}, (error: AxiosError) => {
|
||
return Promise.reject(error)
|
||
})
|
||
|
||
//响应拦截器
|
||
|
||
service.interceptors.response.use((config: AxiosResponse) => {
|
||
const {code, data} = config.data
|
||
|
||
if ([1, '200'].includes(code)) {
|
||
return data
|
||
//当为文件流时
|
||
} else if (config.headers['content-types'] == 'application/octet-stream') {
|
||
return config.data
|
||
} else {
|
||
// Message.error(message);
|
||
return Promise.reject(config.data)
|
||
}
|
||
}, error => {
|
||
if (error.message == 'Network Error') {
|
||
// Toast.error("网络异常")
|
||
}
|
||
return Promise.reject()
|
||
})
|
||
|
||
|
||
function requestPost(url: string, data = {}, config: AxiosRequestConfig = {}) {
|
||
return service.post(url, data, config)
|
||
}
|
||
function requestPatch(url: string, data = {}, config: AxiosRequestConfig = {}) {
|
||
return service.patch(url, data, config)
|
||
}
|
||
|
||
|
||
function requestGet(url: string, params: any = {}) {
|
||
return service.get(url, {params})
|
||
}
|
||
|
||
function requestDelete(url: string, data = {}) {
|
||
return service.delete(url, {data: data})
|
||
}
|
||
|
||
let request = {
|
||
get: requestGet,
|
||
post: requestPost,
|
||
delete: requestDelete,
|
||
patch: requestPatch,
|
||
}
|
||
export default request |