|
|
import axios, { AxiosInstance, AxiosResponse, InternalAxiosRequestConfig, AxiosHeaders, } from 'axios' import { getServerInfo } from './getServerInfo' import { eventBus } from '../eventBus' const serverInfo = getServerInfo() // 创建 Axios 实例
const apiClient: AxiosInstance = axios.create({ baseURL: serverInfo.httpUrl, // 设置请求的根路径
timeout: 60000, headers: { 'Content-Type': 'application/json', }, })
// 请求拦截器
apiClient.interceptors.request.use( (config: InternalAxiosRequestConfig<any>) => { const token = sessionStorage.getItem('token')
// 使用 AxiosHeaders.from() 创建 headers,如果 headers 为空
if (!config.headers) { config.headers = AxiosHeaders.from({}) // 确保 config.headers 是 AxiosHeaders 类型
}
if (token) { config.headers.set( 'Authorization', `Bearer ${encodeURIComponent(token)}`, ) // 使用 set 方法设置 Authorization
}
return config }, (error) => { return Promise.reject(error) }, )
// 响应拦截器
apiClient.interceptors.response.use( (response: AxiosResponse<any>) => { if (response.data && response.data.dataType === 'ZAppPromopt') { if (response.data.ecode === 'USR_NOT_EXIT') { return Promise.resolve(response.data) } else if (response.data.ecode === 'USR_PASSWORD_ERROR') { return Promise.resolve(response.data) } else { console.log('接口出错', response.data) eventBus.emit('show-error-modal', { type: response.data.data.type, info: response.data.data.info, detailInfos: response.data.data.detailInfos, ecode: response.data.data.ecode, stackInfo: response.data.data.stackInfo, }) return Promise.reject(response.data) } } return response }, (error) => { eventBus.emit('show-error-modal', { type: 'Error', info: '网络请求失败', detailInfos: [ { name: '错误详情', description: error.message, }, ], }) return Promise.reject(error) }, )
export default apiClient
|