getData.ts 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  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 } = 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': 'nwpre.bjzxtw.org.cn',
  17. 'token': getToken(),
  18. //'Origin': 'http://nwpre.bjzxtw.org.cn',//pre
  19. 'Origin':$userUrl,
  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 } = useNuxtApp()
  39. let fullUrl = $webUrl + url;
  40. // 生成唯一的 key
  41. const key = `${url}-${JSON.stringify(options.query || options.body)}`;
  42. // 设置默认的请求头
  43. const headers = {
  44. 'Content-Type': 'application/json',
  45. 'Userurl': 'nwpre.bjzxtw.org.cn',
  46. 'token': getToken(),
  47. 'Origin': $userUrl,
  48. };
  49. // 确定请求方法
  50. const method = options.method || 'GET';
  51. try {
  52. // 使用 useAsyncData 进行数据获取
  53. const { data, error } = await useAsyncData(key, () => {
  54. return $fetch(fullUrl, {
  55. method,
  56. headers,
  57. body: method === 'POST' ? options.body : undefined, // 仅在 POST 请求时设置 body
  58. query: method === 'GET' ? options.query : undefined, // 仅在 GET 请求时设置 query
  59. });
  60. }, { lazy: true }); // 禁用缓存
  61. if (error.value) {
  62. reject(error.value); // 如果有错误,拒绝 Promise
  63. } else {
  64. resolve(data.value); // 如果成功,返回数据
  65. }
  66. } catch (err) {
  67. reject(err); // 捕获异常并拒绝 Promise
  68. }
  69. });
  70. }
  71. // requestDataWebUrl 请求非本网地址时 使用这个方法
  72. function requestDataWebUrl(url, options = {}) {
  73. return new Promise(async (resolve, reject) => {
  74. //获得全局变量中的webUrl和userUrl
  75. const { $webUrl, $userUrl } = useNuxtApp()
  76. let fullUrl = `${url}`;
  77. // 生成唯一的 key
  78. const key = `${url}-${JSON.stringify(options.query || options.body)}`;
  79. // 设置默认的请求头
  80. const headers = {
  81. 'Content-Type': 'application/json',
  82. 'Userurl': 'nwpre.bjzxtw.org.cn',
  83. 'token': getToken(),
  84. 'Origin': $userUrl,
  85. };
  86. // 确定请求方法
  87. const method = options.method || 'GET';
  88. try {
  89. // 使用 useAsyncData 进行数据获取
  90. const { data, error } = await useAsyncData(key, () => {
  91. return $fetch(fullUrl, {
  92. method,
  93. headers,
  94. body: method === 'POST' ? options.body : undefined, // 仅在 POST 请求时设置 body
  95. query: method === 'GET' ? options.query : undefined, // 仅在 GET 请求时设置 query
  96. });
  97. }, { lazy: true }); // 禁用缓存
  98. if (error.value) {
  99. reject(error.value); // 如果有错误,拒绝 Promise
  100. } else {
  101. resolve(data.value); // 如果成功,返回数据
  102. }
  103. } catch (err) {
  104. reject(err); // 捕获异常并拒绝 Promise
  105. }
  106. });
  107. }
  108. export { requestData, requestDataPromise ,requestDataWebUrl };