活动问卷
25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.
 
 
 
 

169 satır
3.6 KiB

  1. export default class Request {
  2. config = {
  3. baseUrl: '',
  4. header: {
  5. 'Content-Type': 'application/x-www-form-urlencoded',
  6. },
  7. method: 'GET',
  8. dataType: 'json',
  9. responseType: 'text',
  10. success() {},
  11. fail() {},
  12. complete() {}
  13. }
  14. static posUrl(url) {
  15. /* 判断url是否为绝对路径 */
  16. return /(http|https):\/\/([\w.]+\/?)\S*/.test(url)
  17. }
  18. interceptor = {
  19. request: (f) => {
  20. if (f) {
  21. this.requestBeforeFun = f
  22. }
  23. },
  24. response: (f) => {
  25. if (f) {
  26. this.requestComFun = f
  27. }
  28. }
  29. }
  30. static requestBeforeFun(config) {
  31. return config
  32. }
  33. static requestComFun(response) {
  34. return response
  35. }
  36. setConfig(f) {
  37. this.config = f(this.config)
  38. return this
  39. }
  40. request(options = {}) {
  41. options.baseUrl = options.baseUrl || this.config.baseUrl
  42. options.dataType = options.dataType || this.config.dataType
  43. options.url = Request.posUrl(options.url) ? options.url : (options.baseUrl + options.url)
  44. options.data = options.data || {}
  45. options.header = options.header || this.config.header
  46. options.method = options.method || this.config.method
  47. if (options['Content-Type']) options.header['Content-Type'] = options['Content-Type']
  48. // console.log(options)
  49. return new Promise((resolve, reject) => {
  50. let next = true
  51. let _config = null
  52. options.complete = (response) => {
  53. let statusCode = response.statusCode
  54. response.config = _config
  55. response = this.requestComFun(response)
  56. if (statusCode != 200) {
  57. let errMessage = '';
  58. switch (statusCode) {
  59. case 400:
  60. errMessage = '请求错误(400)';
  61. break;
  62. case 401:
  63. errMessage = '未授权,请重新登录(401)';
  64. uni.showToast({
  65. title: '登录失效',
  66. icon: 'none',
  67. position: 'bottom',
  68. duration: 1500
  69. })
  70. break;
  71. case 403:
  72. errMessage = '拒绝访问(403)';
  73. break;
  74. case 404:
  75. errMessage = '请求出错(404)';
  76. break;
  77. case 408:
  78. errMessage = '请求超时(408)';
  79. break;
  80. case 500:
  81. errMessage = '服务器错误(500)';
  82. break;
  83. case 501:
  84. errMessage = '服务未实现(501)';
  85. break;
  86. case 502:
  87. errMessage = '网络错误(502)';
  88. break;
  89. case 503:
  90. errMessage = '服务不可用(503)';
  91. break;
  92. case 504:
  93. errMessage = '网络超时(504)';
  94. break;
  95. case 505:
  96. errMessage = 'HTTP版本不受支持(505)';
  97. break;
  98. default:
  99. errMessage = "连接出错(" + statusCode + ")!";
  100. break;
  101. }
  102. if (statusCode != 401) {
  103. uni.showToast({
  104. title: errMessage,
  105. icon: 'none',
  106. position: 'bottom',
  107. duration: 1500
  108. })
  109. }
  110. reject({
  111. statusCode,
  112. errMessage
  113. })
  114. } else {
  115. let _code = response.data.code;
  116. if (_code == '-201' || _code == '-202' || _code == '-203') {
  117. uni.showToast({
  118. title: '登录失效 请重新登录',
  119. icon: 'none',
  120. })
  121. } else {
  122. resolve(response)
  123. }
  124. }
  125. uni.stopPullDownRefresh();
  126. }
  127. let cancel = (t = 'handle cancel') => {
  128. let err = {
  129. errMsg: t,
  130. config: afC
  131. }
  132. reject(err)
  133. next = false
  134. }
  135. let afC = {
  136. ...this.config,
  137. ...options
  138. }
  139. _config = {
  140. ...afC,
  141. ...this.requestBeforeFun(afC, cancel)
  142. }
  143. if (!next) return
  144. uni.request(_config)
  145. })
  146. }
  147. get(url, data, options = {}) {
  148. options.url = url
  149. options.data = data
  150. options.method = 'GET'
  151. return this.request(options)
  152. }
  153. post(url, data, options = {}) {
  154. options.url = url
  155. options.data = data
  156. options.method = 'POST'
  157. return this.request(options)
  158. }
  159. }