RequestModules.ts 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. /**
  2. * 说明:
  3. * * 不同服务器的请求模块。
  4. */
  5. import type { DataModel, NewDataModel } from "@imengyu/js-request-transform";
  6. import { BaseAppServerRequestModule } from "./BaseAppServerRequestModule";
  7. import { appendGetUrlParams, defaultResponseDataHandlerCatch, RequestApiError, RequestApiResult, RequestCoreInstance, RequestOptions, RequestResponse, type RequestApiInfoStruct } from "@imengyu/imengyu-utils";
  8. import ApiCofig from "@/common/config/ApiCofig";
  9. /**
  10. * 主应用服务请求模块
  11. */
  12. export class AppServerRequestModule<T extends DataModel> extends BaseAppServerRequestModule<T> {
  13. constructor() {
  14. super('base-app-server');
  15. }
  16. }
  17. /**
  18. * 更新服务请求模块
  19. */
  20. export class UpdateServerRequestModule<T extends DataModel> extends BaseAppServerRequestModule<T> {
  21. constructor() {
  22. super("https://update-server1.imengyu.top");
  23. this.config.requestInterceptor = undefined;
  24. this.config.responseDataHandler = async function responseDataHandler<T extends DataModel>(response: RequestResponse, req: RequestOptions, resultModelClass: NewDataModel | undefined, instance: RequestCoreInstance<T>, apiInfo: RequestApiInfoStruct): Promise<RequestApiResult<T>> {
  25. const method = req.method || 'GET';
  26. try {
  27. const json = await response.json();
  28. if (response.ok) {
  29. if (!json) {
  30. throw new RequestApiError(
  31. 'businessError',
  32. '后端未返回数据',
  33. '',
  34. response.status,
  35. null,
  36. null,
  37. response.headers,
  38. apiInfo
  39. );
  40. }
  41. if (!json.success)
  42. throw new RequestApiError(
  43. 'businessError',
  44. json.message,
  45. json.code.toString(),
  46. json.code,
  47. json,
  48. json,
  49. response.headers,
  50. apiInfo
  51. );
  52. return new RequestApiResult(
  53. resultModelClass ?? instance.config.modelClassCreator,
  54. json?.code || response.status,
  55. json.message,
  56. json.data,
  57. json,
  58. response.headers,
  59. apiInfo
  60. );
  61. }
  62. else {
  63. throw json;
  64. }
  65. } catch (err) {
  66. if (err instanceof RequestApiError) {
  67. throw response;
  68. }
  69. //错误统一处理
  70. return new Promise<RequestApiResult<T>>((resolve, reject) => {
  71. defaultResponseDataHandlerCatch(method, req, response, null, err as any, apiInfo, response.url, reject, instance);
  72. });
  73. }
  74. };
  75. }
  76. }
  77. /**
  78. * 腾讯地图服务请求模块
  79. */
  80. export class MapServerRequestModule<T extends DataModel> extends BaseAppServerRequestModule<T> {
  81. constructor() {
  82. super("https://apis.map.qq.com");
  83. this.config.requestInterceptor = (url, req) => {
  84. url = appendGetUrlParams(url, 'key', ApiCofig.mapKey);
  85. return { newUrl: url, newReq: req };
  86. };
  87. this.config.responseDataHandler = async function responseDataHandler<T extends DataModel>(response: RequestResponse, req: RequestOptions, resultModelClass: NewDataModel | undefined, instance: RequestCoreInstance<T>, apiInfo: RequestApiInfoStruct): Promise<RequestApiResult<T>> {
  88. const method = req.method || 'GET';
  89. try {
  90. const json = await response.json();
  91. if (response.ok) {
  92. if (!json) {
  93. throw new RequestApiError(
  94. 'businessError',
  95. '后端未返回数据',
  96. '',
  97. response.status,
  98. null,
  99. null,
  100. response.headers,
  101. apiInfo
  102. );
  103. }
  104. if (json.status !== 0)
  105. throw new RequestApiError(
  106. 'businessError',
  107. json.message,
  108. json.status.toString(),
  109. json.status,
  110. json,
  111. json,
  112. response.headers,
  113. apiInfo
  114. );
  115. return new RequestApiResult(
  116. resultModelClass ?? instance.config.modelClassCreator,
  117. json?.status || response.status,
  118. json.message,
  119. json.result,
  120. json,
  121. response.headers,
  122. apiInfo
  123. );
  124. }
  125. else {
  126. throw json;
  127. }
  128. } catch (err) {
  129. if (err instanceof RequestApiError) {
  130. throw response;
  131. }
  132. //错误统一处理
  133. return new Promise<RequestApiResult<T>>((resolve, reject) => {
  134. defaultResponseDataHandlerCatch(method, req, response, null, err as any, apiInfo, response.url, reject, instance);
  135. });
  136. }
  137. };
  138. }
  139. }