httpBlob.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. /**
  2. * axios 实例
  3. */
  4. import axios from 'axios';
  5. import router from '@/router';
  6. import { MessageBox, Message } from 'element-ui';
  7. import { API_BASE_URL, TOKEN_HEADER_NAME, LAYOUT_PATH } from '@/config/setting';
  8. import { getToken, setToken } from './token-util';
  9. import { logout } from './page-tab-util';
  10. import JSONBIG from 'json-bigint';
  11. const service = axios.create({
  12. baseURL: API_BASE_URL,
  13. transformResponse: [
  14. function (data) {
  15. const json = JSONBIG({
  16. storeAsString: true
  17. });
  18. const res = json.parse(data);
  19. return res;
  20. }
  21. ]
  22. });
  23. /**
  24. * 添加请求拦截器
  25. */
  26. service.interceptors.request.use(
  27. (config) => {
  28. // 添加 token 到 header
  29. const token = getToken();
  30. if (token && config.headers) {
  31. config.headers.common[TOKEN_HEADER_NAME] = token;
  32. }
  33. return config;
  34. },
  35. (error) => {
  36. return Promise.reject(error);
  37. }
  38. );
  39. /**
  40. * 添加响应拦截器
  41. */
  42. // 添加响应拦截器
  43. // 添加响应拦截器
  44. // 添加响应拦截器
  45. service.interceptors.response.use(
  46. (response) => {
  47. // token 自动续期
  48. if (
  49. response.data.code === '-1' &&
  50. response.config?.showErrorToast !== false
  51. ) {
  52. Message.error(response.data.message);
  53. }
  54. // Check if the response content type is 'blob'
  55. const isBlob =
  56. response.headers['content-type'] &&
  57. response.headers['content-type'].toLowerCase().includes('blob');
  58. // Return the original response for blob data
  59. if (isBlob) {
  60. return response;
  61. }
  62. // Parse the JSON data for non-blob responses
  63. try {
  64. const token = response.headers[TOKEN_HEADER_NAME.toLowerCase()];
  65. if (token) {
  66. setToken(token);
  67. }
  68. // Parse JSON data
  69. const json = JSONBIG({
  70. storeAsString: true
  71. });
  72. const data = json.parse(response.data);
  73. return data;
  74. } catch (error) {
  75. console.error('JSON parsing error:', error);
  76. return Promise.reject(error);
  77. }
  78. }
  79. // ...
  80. );
  81. export default service;