request.ts 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. import Taro from "@tarojs/taro";
  2. interface RequestParam {
  3. url: string;
  4. method: 'POST' | 'GET' | 'DELETE' | 'PUT';
  5. data?: Record<string, any>;
  6. showAlert?: boolean;
  7. }
  8. interface Resp {
  9. statusCode?: number;
  10. header?: any;
  11. data?: any;
  12. errMsg?: string;
  13. };
  14. async function getStorage(key:string) {
  15. try {
  16. const res = await Taro.getStorage({ key });
  17. return res.data;
  18. } catch {
  19. return '';
  20. }
  21. }
  22. export async function request<T>(param: RequestParam): Promise<T> {
  23. const { url, method, data } = param;
  24. let header: any = {};
  25. const token = global.token?global.token:''//await getStorage('token')
  26. var split = new Date().toString().split(' ');
  27. var timeZoneFormatted = split[split.length - 2];
  28. header['X-Time-Zone'] = timeZoneFormatted; //new Date().getTimezoneOffset() / 60
  29. if (token.length>0){
  30. header['Authorization'] = `Bearer ${token}`
  31. }
  32. //X-Language:语言,X-Device-Id:设备唯一码,X-Platform:小程序/android/ios,X-Location:地区,X-Device:登录设备
  33. // header['X-Language'] = ''
  34. // header['X-Device-Id'] = ''
  35. // header['X-Platform'] = ''
  36. // header['X-Location'] = ''
  37. // header['X-Device'] = ''
  38. // header['X-Time-Zone-Id'] = Intl.DateTimeFormat().resolvedOptions().timeZone
  39. // header['Authorization'] = 'Bearer ' + wx.getStorageSync('token');
  40. // header['Authorization'] = 'Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdWQiOiJhY2NvdW50Iiwic3ViIjoiMmQ5OWNlYzI0ZDFlMzE0Y2U1MjhlODM4MWMzYzk0MzgiLCJpc3MiOiJDT0RFUEFBUy5DT00iLCJuaWNrbmFtZSI6IueOi-a4nSIsInR5cCI6IkJlYXJlciIsInNlc3Npb25fc3RhdGUiOiIyN2RjNmU4ZDdjMWU1MTVmNDQwNzVjZTFlODk2ZmUzNCIsImV4cCI6MTcxNjY0Mzk5MSwiaWF0IjoxNjg1MDIxNTkxfQ.fmFj0OVNRzjLkdebSyGJyk8EScPJFpDiz0L25W35zoA'
  41. return new Promise((resolve, reject) => {
  42. Taro.request({
  43. url: url,
  44. method: method,
  45. header: header,
  46. data: data || {},
  47. success: (response: Resp | { [key: string]: any }) => {
  48. const { statusCode, data } = response;
  49. if (statusCode >=200 && statusCode < 300){
  50. var resp = {} as T;
  51. if (response.data){
  52. resp = response.data as T;
  53. }
  54. resolve(resp);
  55. }
  56. else if (statusCode == 401) {
  57. }
  58. else {
  59. reject(data);
  60. }
  61. // if (statusCode == 204){
  62. // resolve({} as T);
  63. // }
  64. // if (statusCode != 200) {
  65. // reject(data);
  66. // }
  67. // const { error_code } = response.data || {};
  68. // if (error_code === 'NOT_LOGIN') {
  69. // // new UserManager().logout();
  70. // }
  71. //200-299 正常resolve
  72. //401 未登录
  73. //400-499 业务错误 reject
  74. },
  75. fail: err => {
  76. if (err.errMsg == 'request:fail timeout') {
  77. // wx.showToast({
  78. // title: '请求超时',
  79. // icon: 'none',
  80. // });
  81. }
  82. reject(err);
  83. },
  84. complete: () => {},
  85. });
  86. });
  87. }
  88. // import axios from 'axios';
  89. // const kTimeout = 6000;
  90. // const kRetry = 3;
  91. // const axiosInstance = axios.create({
  92. // timeout: kTimeout,
  93. // });
  94. // axios.interceptors.request.use(
  95. // function (config) {
  96. // var split = new Date().toString().split(' ');
  97. // var timeZoneFormatted = split[split.length - 2];
  98. // config.headers['X-Time-Zone'] = timeZoneFormatted;
  99. // // config.headers['channel'] = 'mini program'
  100. // return config
  101. // },
  102. // function (error) {
  103. // return Promise.reject(error)
  104. // }
  105. // )
  106. // axiosInstance.interceptors.response.use(
  107. // response => response,
  108. // error => Promise.reject(error)
  109. // );
  110. // export const request = async (url, method = 'post', data = {}, options = {}) => {
  111. // const { timeout = kTimeout, retry = kRetry } = options;
  112. // axiosInstance.defaults.timeout = timeout;
  113. // let retries = 0;
  114. // while (retries < retry) {
  115. // try {
  116. // const response = await axiosInstance({
  117. // url,
  118. // method,
  119. // data,
  120. // });
  121. // return response.data;
  122. // } catch (error) {
  123. // console.log(error)
  124. // if (axios.isCancel(error)) {
  125. // // 请求被取消
  126. // console.log('Request canceled');
  127. // break;
  128. // }
  129. // if (retries === retry - 1) {
  130. // // 达到最大重试次数
  131. // throw error;
  132. // }
  133. // console.log('Request failed. Retrying...');
  134. // retries++;
  135. // }
  136. // }
  137. // };