getData.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. import { getToken } from '@/store/useCookieStore';
  2. const servUrl = 'http://apipre1.bjzxtw.org.cn:29501';
  3. // requestData方法 如果只是单一请求,可以直接调用这个方法
  4. function requestData(url, options = {}) {
  5. let fullUrl = `${servUrl}${url}`;
  6. // 生成唯一的 key
  7. const key = `${url}-${JSON.stringify(options.query || options.body)}`;
  8. // 设置默认的请求头
  9. const headers = {
  10. 'Content-Type': 'application/json',
  11. 'Userurl': 'nwpre.bjzxtw.org.cn',
  12. 'token': getToken(),
  13. 'Origin': 'http://nwpre.bjzxtw.org.cn',
  14. };
  15. // 确定请求方法
  16. const method = options.method || 'GET';
  17. // 使用 useAsyncData 进行数据获取
  18. const { data, error } = useAsyncData(key, () => {
  19. return $fetch(fullUrl, {
  20. method,
  21. headers,
  22. body: method === 'POST' ? options.body : undefined, // 仅在 POST 请求时设置 body
  23. query: method === 'GET' ? options.query : undefined, // 仅在 GET 请求时设置 query
  24. });
  25. }, { lazy: true }); // 禁用缓存
  26. return { data, error };
  27. }
  28. // requestDataPromise 如果你的请求中的参数依赖上一个请求,使用这个方法
  29. function requestDataPromise(url, options = {}) {
  30. return new Promise(async (resolve, reject) => {
  31. let fullUrl = `${servUrl}${url}`;
  32. // 生成唯一的 key
  33. const key = `${url}-${JSON.stringify(options.query || options.body)}`;
  34. // 设置默认的请求头
  35. const headers = {
  36. 'Content-Type': 'application/json',
  37. 'Userurl': 'nwpre.bjzxtw.org.cn',
  38. 'token': getToken(),
  39. 'Origin': 'http://nwpre.bjzxtw.org.cn',
  40. };
  41. // 确定请求方法
  42. const method = options.method || 'GET';
  43. try {
  44. // 使用 useAsyncData 进行数据获取
  45. const { data, error } = await useAsyncData(key, () => {
  46. return $fetch(fullUrl, {
  47. method,
  48. headers,
  49. body: method === 'POST' ? options.body : undefined, // 仅在 POST 请求时设置 body
  50. query: method === 'GET' ? options.query : undefined, // 仅在 GET 请求时设置 query
  51. });
  52. }, { lazy: true }); // 禁用缓存
  53. if (error.value) {
  54. reject(error.value); // 如果有错误,拒绝 Promise
  55. } else {
  56. resolve(data.value); // 如果成功,返回数据
  57. }
  58. } catch (err) {
  59. reject(err); // 捕获异常并拒绝 Promise
  60. }
  61. });
  62. }
  63. // requestDataWebUrl 请求非本网地址时 使用这个方法
  64. function requestDataWebUrl(url, options = {}) {
  65. return new Promise(async (resolve, reject) => {
  66. let fullUrl = `${url}`;
  67. // 生成唯一的 key
  68. const key = `${url}-${JSON.stringify(options.query || options.body)}`;
  69. // 设置默认的请求头
  70. const headers = {
  71. 'Content-Type': 'application/json',
  72. 'Userurl': 'nwpre.bjzxtw.org.cn',
  73. 'token': getToken(),
  74. 'Origin': 'http://nwpre.bjzxtw.org.cn',
  75. };
  76. // 确定请求方法
  77. const method = options.method || 'GET';
  78. try {
  79. // 使用 useAsyncData 进行数据获取
  80. const { data, error } = await useAsyncData(key, () => {
  81. return $fetch(fullUrl, {
  82. method,
  83. headers,
  84. body: method === 'POST' ? options.body : undefined, // 仅在 POST 请求时设置 body
  85. query: method === 'GET' ? options.query : undefined, // 仅在 GET 请求时设置 query
  86. });
  87. }, { lazy: true }); // 禁用缓存
  88. if (error.value) {
  89. reject(error.value); // 如果有错误,拒绝 Promise
  90. } else {
  91. resolve(data.value); // 如果成功,返回数据
  92. }
  93. } catch (err) {
  94. reject(err); // 捕获异常并拒绝 Promise
  95. }
  96. });
  97. }
  98. export { requestData, requestDataPromise ,requestDataWebUrl };