getData.js 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. import { getToken } from '@/store/useCookieStore';
  2. // requestDataPromise 如果你的请求中的参数依赖上一个请求,使用这个方法
  3. function requestDataPromise(url, options = {}) {
  4. return new Promise(async (resolve, reject) => {
  5. //获得全局变量中的webUrl和userUrl
  6. const { $webUrl, $userUrl , $CwebUrl } = useNuxtApp()
  7. let fullUrl = $webUrl + url;
  8. let key = `${url}-${JSON.stringify(options.query)}`;
  9. // console.log(555555555)
  10. // console.log(key)
  11. //let key = "abc" 不能为固定值
  12. //let key = Math.random().toString(36).substring(2, 15); 不能为固定方法 都会留下缓存
  13. // 设置默认的请求头
  14. const headers = {
  15. 'Content-Type': 'application/json',
  16. 'Userurl': $CwebUrl,
  17. 'token': getToken(),
  18. 'Origin': $CwebUrl,
  19. };
  20. // 确定请求方法
  21. const method = options.method || 'GET';
  22. try {
  23. // 使用 useAsyncData 进行数据获取
  24. const { data, error } = await useAsyncData(key, () => {
  25. return $fetch(fullUrl, {
  26. method,
  27. headers,
  28. body: method === 'POST' ? options.body : undefined, // 仅在 POST 请求时设置 body
  29. query: method === 'GET' ? options.query : undefined, // 仅在 GET 请求时设置 query
  30. });
  31. }, {
  32. lazy: false,
  33. });
  34. if (error.value) {
  35. reject(error.value); // 如果有错误,拒绝 Promise
  36. } else {
  37. resolve(data.value); // 如果成功,返回数据
  38. }
  39. } catch (err) {
  40. reject(err); // 捕获异常并拒绝 Promise
  41. }
  42. });
  43. }
  44. // requestDataWebUrl 请求非本网地址时 使用这个方法
  45. function requestDataWebUrl(url, options = {}) {
  46. return new Promise(async (resolve, reject) => {
  47. //获得全局变量中的webUrl和userUrl
  48. const { $webUrl, $userUrl, $CwebUrl } = useNuxtApp()
  49. let fullUrl = `${url}`;
  50. // 生成唯一的 key
  51. const key = `${url}-${JSON.stringify(options.query || options.body)}`;
  52. // 设置默认的请求头
  53. const headers = {
  54. 'Content-Type': 'application/json',
  55. 'Userurl': $CwebUrl,
  56. 'token': getToken(),
  57. 'Origin': $CwebUrl,
  58. };
  59. // 确定请求方法
  60. const method = options.method || 'GET';
  61. try {
  62. // 使用 useAsyncData 进行数据获取
  63. const { data, error } = await useAsyncData(key, () => {
  64. return $fetch(fullUrl, {
  65. method,
  66. headers,
  67. body: method === 'POST' ? options.body : undefined, // 仅在 POST 请求时设置 body
  68. query: method === 'GET' ? options.query : undefined, // 仅在 GET 请求时设置 query
  69. });
  70. }, { lazy: true }); // 禁用缓存
  71. if (error.value) {
  72. reject(error.value); // 如果有错误,拒绝 Promise
  73. } else {
  74. resolve(data.value); // 如果成功,返回数据
  75. }
  76. } catch (err) {
  77. reject(err); // 捕获异常并拒绝 Promise
  78. }
  79. });
  80. }
  81. // 在首页执行缓存
  82. function requestHome(url, options = {}) {
  83. return new Promise(async (resolve, reject) => {
  84. //获得全局变量中的webUrl和userUrl
  85. const { $webUrl, $userUrl,$CwebUrl } = useNuxtApp()
  86. let fullUrl = $webUrl + url;
  87. let key = `${url}-${JSON.stringify(options.query)}`;
  88. //let key = "abc" 不能为固定值
  89. //let key = Math.random().toString(36).substring(2, 15); 不能为固定方法 都会留下缓存
  90. // 设置默认的请求头
  91. const headers = {
  92. 'Content-Type': 'application/json',
  93. 'Userurl': $CwebUrl,
  94. 'token': getToken(),
  95. 'Origin': $CwebUrl,
  96. };
  97. // 确定请求方法
  98. const method = options.method || 'GET';
  99. try {
  100. // 使用 useAsyncData 进行数据获取
  101. const { data, error } = await useAsyncData(key, () => {
  102. return $fetch(fullUrl, {
  103. method,
  104. headers,
  105. body: method === 'POST' ? options.body : undefined, // 仅在 POST 请求时设置 body
  106. query: method === 'GET' ? options.query : undefined, // 仅在 GET 请求时设置 query
  107. });
  108. }, {
  109. lazy: true, //使用缓存
  110. });
  111. if (error.value) {
  112. reject(error.value); // 如果有错误,拒绝 Promise
  113. } else {
  114. resolve(data.value); // 如果成功,返回数据
  115. }
  116. } catch (err) {
  117. reject(err); // 捕获异常并拒绝 Promise
  118. }
  119. });
  120. }
  121. export { requestDataPromise ,requestDataWebUrl, requestHome };