api.ts 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import axios, { AxiosResponse } from 'axios';
  2. import { message } from 'antd';
  3. import config, { getHeaders } from './config';
  4. import LocalStorage from '@/LocalStorage';
  5. import router from '@/router';
  6. // 创建axios实例
  7. const axiosInstance = axios.create({
  8. baseURL: config.baseURL,
  9. timeout: 30000,// 请求超时30秒
  10. });
  11. // 请求拦截器
  12. axiosInstance.interceptors.request.use(
  13. (config: any) => {
  14. config.headers = getHeaders();
  15. if (!navigator.onLine) {
  16. message.error('网络故障');
  17. }
  18. return config;
  19. }
  20. );
  21. // 响应拦截器
  22. axiosInstance.interceptors.response.use(
  23. (response: AxiosResponse) => {// 成功信息
  24. const { config, data } = response;
  25. if (config.responseType === 'blob') {
  26. return Promise.resolve(data);
  27. } else {
  28. if (data.code === 200) {// 成功
  29. return Promise.resolve(data);
  30. } else {// 失败
  31. return Promise.reject(data);
  32. }
  33. }
  34. },
  35. (error) => {// 错误信息
  36. // HTTP状态码
  37. const statusCode = error.response.status;
  38. if (String(error).includes('timeout')) {
  39. message.error('请求超时');
  40. } else {
  41. if (statusCode === 401) {
  42. LocalStorage.clear();
  43. router.navigate({ pathname: '/login' }, { replace: true });
  44. message.error('登录过期');
  45. } else {
  46. message.error('服务异常');
  47. }
  48. }
  49. return Promise.reject();
  50. }
  51. );
  52. export default axiosInstance;