书院官网
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

request.js 4.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. /**axios封装
  2. * 请求拦截、相应拦截、错误统一处理
  3. */
  4. import axios from "axios";
  5. // import QS from 'qs';
  6. // 环境的切换
  7. axios.defaults.baseURL =
  8. import.meta.env.VITE_BASE_URL;
  9. // 请求超时时间
  10. axios.defaults.timeout = 25000;
  11. // post请求头
  12. axios.defaults.headers.post["Content-Type"] = "application/x-www-form-urlencoded;charset=UTF-8";
  13. // axios.defaults.headers.post["Content-Type"] = "application/json; charset=UTF-8";
  14. let pending = []; //声明一个数组用于存储每个请求的取消函数和axios标识
  15. let cancelRepeatUrl = []; // 园区服务、物业租售
  16. let cancelToken = axios.CancelToken;
  17. let removePending = config => {
  18. // console.log(config);
  19. for (let i in pending) {
  20. if (pending[i].url === axios.defaults.baseURL + config.url) {
  21. //在当前请求在数组中存在时执行取消函数
  22. pending[i].f(); //执行取消操作
  23. // pending.splice(i, 1); // 根据具体情况决定是否在这里就把pending去掉
  24. // console.log("重复的:" + pending[i].url);
  25. }
  26. }
  27. };
  28. // 请求拦截器
  29. axios.interceptors.request.use(
  30. config => {
  31. // 每次发送请求之前判断是否存在token,如果存在,则统一在http请求的header都加上token,不用每次请求都手动添加了
  32. // 即使本地存在token,也有可能token是过期的,所以在响应拦截器中要对返回状态进行判断
  33. // const token = store.state.token;
  34. // token && (config.headers.Authorization = token);
  35. // return config;
  36. removePending(config); //在一个axios发送前执行一下判定操作,在removePending中执行取消操作
  37. // console.log(config.url);
  38. config.cancelToken = new cancelToken(function executor(c) {
  39. //本次axios请求的配置添加cancelToken
  40. if (cancelRepeatUrl.indexOf(config.url) > -1) {
  41. pending.push({
  42. // url: config.url,
  43. url: axios.defaults.baseURL + config.url,
  44. f: c,
  45. });
  46. // console.log(axios.defaults.baseURL + config.url);
  47. //将本次的url添加到pending中,因此对于某个url第一次发起的请求不会被取消,因为还没有配置取消函数
  48. }
  49. });
  50. return Promise.resolve(config);
  51. },
  52. error => {
  53. return Promise.error(error);
  54. }
  55. );
  56. // 响应拦截器
  57. axios.interceptors.response.use(
  58. response => {
  59. if (response.status === 200) {
  60. // removePending(response.config); //在一个axios响应后再执行一下取消操作,把已经完成的请求从pending中移除
  61. return Promise.resolve(response);
  62. } else {
  63. return Promise.reject(response);
  64. }
  65. },
  66. // 服务器状态码不是200的情况
  67. error => {
  68. if (error.response) {
  69. return Promise.reject(error.response);
  70. }
  71. }
  72. );
  73. /**
  74. * get方法,对应get请求
  75. * @param {String} url [请求的url地址]
  76. * @param {Object} params [请求时携带的参数]
  77. */
  78. export function get(url, params) {
  79. return new Promise((resolve, reject) => {
  80. axios
  81. .get(url, {
  82. params: params,
  83. })
  84. .then(res => {
  85. resolve(res);
  86. })
  87. .catch(err => {
  88. reject(err);
  89. });
  90. });
  91. }
  92. /**
  93. * post方法,对应post请求
  94. * @param {String} url [请求的url地址]
  95. * @param {Object} params [请求时携带的参数]
  96. */
  97. export function post(url, params, options) {
  98. return new Promise((resolve, reject) => {
  99. axios
  100. .post(url, params, options)
  101. .then(res => {
  102. resolve(res);
  103. })
  104. .catch(err => {
  105. reject(err);
  106. });
  107. });
  108. }
  109. /**
  110. * put方法,对应put请求
  111. * @param {String} url [请求的url地址]
  112. * @param {Object} params [请求时携带的参数]
  113. */
  114. export function put(url, params) {
  115. return new Promise((resolve, reject) => {
  116. axios
  117. .put(url, params)
  118. .then(res => {
  119. resolve(res);
  120. })
  121. .catch(err => {
  122. reject(err);
  123. });
  124. });
  125. }
  126. /**
  127. * delete方法,对应delete请求,delete是保留字,使用del代替
  128. * @param {String} url [请求的url地址]
  129. */
  130. export function del(url, params) {
  131. return new Promise((resolve, reject) => {
  132. axios
  133. .delete(url, {
  134. params: params,
  135. })
  136. .then(res => {
  137. resolve(res);
  138. })
  139. .catch(err => {
  140. reject(err);
  141. });
  142. });
  143. }