request.ts 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import axios, { AxiosInstance, AxiosError, AxiosRequestConfig, AxiosResponse } from 'axios'
  2. import { ElMessage } from "element-plus";
  3. import { useUserStore } from "@/store/modules/user"
  4. // 创建axios实例 进行基本参数配置
  5. const service = axios.create({
  6. // 默认请求地址,根据环境的不同可在.env 文件中进行修改
  7. // baseURL: import.meta.env.VUE_APP_BASE_
  8. baseURL: "http://127.0.0.1:8001",
  9. // baseURL: "http://192.168.123.216:8001",
  10. // baseURL: "http://localhost:8001",
  11. // 设置接口访问超时时间
  12. timeout: 3000000, // request timeout,
  13. // 跨域时候允许携带凭证
  14. // withCredentials: true
  15. })
  16. // request interceptor 接口请求拦截
  17. service.interceptors.request.use((config: AxiosRequestConfig) => {
  18. /**
  19. * 用户登录之后获取服务端返回的token,后面每次请求都在请求头中带上token进行JWT校验
  20. * token 存储在本地储存中(storage)、vuex、pinia
  21. */
  22. const userStore = useUserStore();
  23. const token: string = userStore.token;
  24. // 自定义请求头
  25. if (token) { config.headers['Authorization'] = token }
  26. return config
  27. }, (error: AxiosError) => {
  28. // 请求错误,这里可以用全局提示框进行提示
  29. return Promise.reject(error);
  30. })
  31. // response interceptor 接口响应拦截
  32. service.interceptors.response.use((response: AxiosResponse) => {
  33. // 直接返回res,当然你也可以只返回res.data
  34. // 系统如果有自定义code也可以在这里处理
  35. return response
  36. }, (error: AxiosError) => {
  37. return Promise.reject(error)
  38. })
  39. /**
  40. * @description 显示错误消息
  41. * opt 传入参数
  42. * err 错误信息
  43. * type 消息类型
  44. * duration 消息持续时间
  45. */
  46. function showErrMessage(opt, err, type: any = 'error', duration: number = 5000) {
  47. ElMessage({
  48. message: err.msg,
  49. type: type,
  50. duration: duration
  51. })
  52. }
  53. export default service