58 lines
1.8 KiB
TypeScript
58 lines
1.8 KiB
TypeScript
import axios, { AxiosInstance, AxiosError, AxiosRequestConfig, AxiosResponse } from 'axios'
|
||
import { ElMessage } from "element-plus";
|
||
import {useUserStore} from "@/store/modules/user"
|
||
// 创建axios实例 进行基本参数配置
|
||
const service = axios.create({
|
||
// 默认请求地址,根据环境的不同可在.env 文件中进行修改
|
||
baseURL: import.meta.env.VUE_APP_BASE_API,
|
||
// 设置接口访问超时时间
|
||
timeout: 3000000, // request timeout,
|
||
// 跨域时候允许携带凭证
|
||
withCredentials: true
|
||
})
|
||
|
||
// request interceptor 接口请求拦截
|
||
service.interceptors.request.use((config:AxiosRequestConfig)=>{
|
||
/**
|
||
* 用户登录之后获取服务端返回的token,后面每次请求都在请求头中带上token进行JWT校验
|
||
* token 存储在本地储存中(storage)、vuex、pinia
|
||
*/
|
||
const userStore = useUserStore();
|
||
const token: string = userStore.token;
|
||
// 自定义请求头
|
||
if(token){ config.headers['Authorization'] = token}
|
||
return config
|
||
},(error: AxiosError) => {
|
||
// 请求错误,这里可以用全局提示框进行提示
|
||
return Promise.reject(error);
|
||
})
|
||
|
||
// response interceptor 接口响应拦截
|
||
service.interceptors.response.use((response: AxiosResponse) =>{
|
||
// 直接返回res,当然你也可以只返回res.data
|
||
// 系统如果有自定义code也可以在这里处理
|
||
return response
|
||
|
||
|
||
},(error: AxiosError) => {
|
||
return Promise.reject(error)
|
||
})
|
||
|
||
|
||
/**
|
||
* @description 显示错误消息
|
||
* opt 传入参数
|
||
* err 错误信息
|
||
* type 消息类型
|
||
* duration 消息持续时间
|
||
*/
|
||
function showErrMessage (opt, err, type:any= 'error', duration:number = 5000){
|
||
ElMessage({
|
||
message: err.msg,
|
||
type:type,
|
||
duration: duration
|
||
})
|
||
}
|
||
|
||
export default service
|