app.ts 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import '@unocss/reset/sanitize/sanitize.css';
  2. import { message, notification } from 'antd';
  3. import type { RequestConfig } from 'umi';
  4. // 与后端约定的响应数据格式
  5. interface ResponseStructure {
  6. code: number;
  7. isSuccess: boolean;
  8. isAuthorized: boolean;
  9. result: any;
  10. message: string;
  11. error: string;
  12. errorCode: string;
  13. }
  14. export const request: RequestConfig = {
  15. timeout: 10000,
  16. // other axios options you want
  17. errorConfig: {
  18. errorThrower(res){
  19. const { code, error: errorMsg, errorCode, isSuccess } = res;
  20. if (!isSuccess) {
  21. const error: any = new Error(errorMsg);
  22. error.name = 'BizError';
  23. error.info = { errorCode, errorMessage: errorMsg };
  24. throw error; // 抛出自制的错误
  25. }
  26. },
  27. errorHandler(error: any, opts: any){
  28. if (opts?.skipErrorHandler) throw error;
  29. // 我们的 errorThrower 抛出的错误。
  30. if (error.name === 'BizError') {
  31. const errorInfo: ResponseStructure | undefined = error.info;
  32. if (errorInfo) {
  33. const { error: errorMessage } = errorInfo;
  34. message.error(errorMessage);
  35. }
  36. } else if (error.response) {
  37. // Axios 的错误
  38. // 请求成功发出且服务器也响应了状态码,但状态代码超出了 2xx 的范围
  39. message.error(`Response status:${error.response.status}`);
  40. } else if (error.request) {
  41. // 请求已经成功发起,但没有收到响应
  42. // \`error.request\` 在浏览器中是 XMLHttpRequest 的实例,
  43. // 而在node.js中是 http.ClientRequest 的实例
  44. message.error('请求无响应,请稍后再试!');
  45. } else {
  46. // 发送请求时出了点问题
  47. message.error('请求错误,请稍后再试!');
  48. }
  49. },
  50. },
  51. requestInterceptors: [
  52. (url, options) => {
  53. const baseUrl = process.env.NODE_ENV === 'production' ? '' : '/api'//'http://ab.dev.jbpm.shalu.com' // https://edesign.shalu.com'
  54. // const enterpriseCode = sessionStorage.getItem('enterpriseCode');
  55. const enterpriseCode = 'a';
  56. const token = localStorage.getItem('token_' + enterpriseCode);
  57. if(token) {
  58. if(!options.headers) {
  59. options.headers = {}
  60. }
  61. options.headers.Authorization = token
  62. }
  63. return {
  64. url: baseUrl + url,
  65. options
  66. }
  67. }
  68. ],
  69. responseInterceptors: [
  70. (response) => {
  71. const {data = {} as any, config} = response;
  72. if(data?.error) {
  73. // message.error(data.error);
  74. return Promise.reject(data.error);
  75. }
  76. return response;
  77. }
  78. ]
  79. };