getData.js 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. import { getToken } from '@/store/useCookieStore';
  2. //获得nuxt.config中配置的域名
  3. //const servUrl = 'http://apipre1.bjzxtw.org.cn:29501'; //pre
  4. //const servUrl = 'http://apidev.bjzxtw.org.cn'; //dev
  5. //const UserUrl = 'http://localhost:3000'; //用户来源
  6. // requestData方法 如果只是单一请求,可以直接调用这个方法
  7. function requestData(url, options = {}) {
  8. //获得全局变量中的webUrl和userUrl
  9. const { $webUrl, $userUrl, $CwebUrl } = useNuxtApp()
  10. let fullUrl = $webUrl + url;
  11. // 生成唯一的 key
  12. const key = `${url}-${JSON.stringify(options.query || options.body)}`;
  13. // 设置默认的请求头
  14. const headers = {
  15. 'Content-Type': 'application/json',
  16. 'Userurl': $CwebUrl,
  17. 'token': getToken(),
  18. //'Origin': 'http://nwpre.bjzxtw.org.cn',//pre
  19. 'Origin': $CwebUrl,
  20. };
  21. // 确定请求方法
  22. const method = options.method || 'GET';
  23. // 使用 useAsyncData 进行数据获取
  24. const { data, error } = 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. }, { lazy: true }); // 禁用缓存
  32. return { data, error };
  33. }
  34. // requestDataPromise 如果你的请求中的参数依赖上一个请求,使用这个方法
  35. function requestDataPromise(url, options = {}) {
  36. return new Promise(async (resolve, reject) => {
  37. //获得全局变量中的webUrl和userUrl
  38. const { $webUrl, $userUrl, $CwebUrl } = useNuxtApp()
  39. let fullUrl = $webUrl + url;
  40. let key = `${url}-${JSON.stringify(options.query)}`;
  41. // console.log(555555555)
  42. // console.log(key)
  43. //let key = "abc" 不能为固定值
  44. //let key = Math.random().toString(36).substring(2, 15); 不能为固定方法 都会留下缓存
  45. // 设置默认的请求头
  46. const headers = {
  47. 'Content-Type': 'application/json',
  48. 'Userurl': $CwebUrl,
  49. 'token': getToken(),
  50. // 'token': 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJwaHBlcjY2Ni9qd3QiLCJ1aWQiOjEzNiwidXNlcl9uYW1lIjoiMTczNDA1Mzc3NzciLCJtb2JpbGUiOiIxNzM0MDUzNzc3NyIsImVtYWlsIjoiIiwibGV2ZWxfaWQiOjAsInR5cGVfaWQiOjEsImp3dF9zY2VuZSI6ImRlZmF1bHQiLCJqdGkiOiJkZWZhdWx0XzY4MmM0YTBkZDE4ZjY2Ljk3MTE3OTQ4IiwiaWF0IjoxNzQ3NzMzMDA1LCJuYmYiOjE3NDc3MzMwMDUsImV4cCI6MTc0NzgxOTQwNX0.3wHxFoGFF3Ex0NWyA_t3sWDp6P840BzPMSkNuEq1Olo',
  51. 'Origin': $CwebUrl,
  52. };
  53. // 确定请求方法
  54. const method = options.method || 'GET';
  55. try {
  56. // 使用 useAsyncData 进行数据获取
  57. const { data, error } = await useAsyncData(key, () => {
  58. return $fetch(fullUrl, {
  59. method,
  60. headers,
  61. body: method === 'POST' ? options.body : undefined, // 仅在 POST 请求时设置 body
  62. query: method === 'GET' ? options.query : undefined, // 仅在 GET 请求时设置 query
  63. });
  64. }, {
  65. lazy: false,
  66. });
  67. if (error.value) {
  68. reject(error.value); // 如果有错误,拒绝 Promise
  69. } else {
  70. resolve(data.value); // 如果成功,返回数据
  71. }
  72. } catch (err) {
  73. reject(err); // 捕获异常并拒绝 Promise
  74. }
  75. });
  76. }
  77. // requestDataWebUrl 请求非本网地址时 使用这个方法
  78. function requestDataWebUrl(url, options = {}) {
  79. return new Promise(async (resolve, reject) => {
  80. //获得全局变量中的webUrl和userUrl
  81. const { $webUrl, $userUrl, $CwebUrl } = useNuxtApp()
  82. let fullUrl = `${url}`;
  83. // 生成唯一的 key
  84. const key = `${url}-${JSON.stringify(options.query || options.body)}`;
  85. // 设置默认的请求头
  86. const headers = {
  87. 'Content-Type': 'application/json',
  88. 'Userurl': $CwebUrl,
  89. 'token': getToken(),
  90. 'Origin': $CwebUrl,
  91. };
  92. // 确定请求方法
  93. const method = options.method || 'GET';
  94. try {
  95. // 使用 useAsyncData 进行数据获取
  96. const { data, error } = await useAsyncData(key, () => {
  97. return $fetch(fullUrl, {
  98. method,
  99. headers,
  100. body: method === 'POST' ? options.body : undefined, // 仅在 POST 请求时设置 body
  101. query: method === 'GET' ? options.query : undefined, // 仅在 GET 请求时设置 query
  102. });
  103. }, { lazy: true }); // 禁用缓存
  104. if (error.value) {
  105. reject(error.value); // 如果有错误,拒绝 Promise
  106. } else {
  107. resolve(data.value); // 如果成功,返回数据
  108. }
  109. } catch (err) {
  110. reject(err); // 捕获异常并拒绝 Promise
  111. }
  112. });
  113. }
  114. // 在首页执行缓存
  115. function requestHome(url, options = {}) {
  116. return new Promise(async (resolve, reject) => {
  117. //获得全局变量中的webUrl和userUrl
  118. const { $webUrl, $userUrl, $CwebUrl } = useNuxtApp()
  119. let fullUrl = $webUrl + url;
  120. let key = `${url}-${JSON.stringify(options.query)}`;
  121. //let key = "abc" 不能为固定值
  122. //let key = Math.random().toString(36).substring(2, 15); 不能为固定方法 都会留下缓存
  123. // 设置默认的请求头
  124. const headers = {
  125. 'Content-Type': 'application/json',
  126. 'Userurl': $CwebUrl,
  127. 'token': getToken(),
  128. 'Origin': $CwebUrl,
  129. };
  130. // 确定请求方法
  131. const method = options.method || 'GET';
  132. try {
  133. // 使用 useAsyncData 进行数据获取
  134. const { data, error } = await useAsyncData(key, () => {
  135. return $fetch(fullUrl, {
  136. method,
  137. headers,
  138. body: method === 'POST' ? options.body : undefined, // 仅在 POST 请求时设置 body
  139. query: method === 'GET' ? options.query : undefined, // 仅在 GET 请求时设置 query
  140. });
  141. }, {
  142. lazy: true, //使用缓存
  143. });
  144. if (error.value) {
  145. reject(error.value); // 如果有错误,拒绝 Promise
  146. } else {
  147. resolve(data.value); // 如果成功,返回数据
  148. }
  149. } catch (err) {
  150. reject(err); // 捕获异常并拒绝 Promise
  151. }
  152. });
  153. }
  154. export { requestData, requestDataPromise, requestDataWebUrl, requestHome };