request.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. import {
  2. getToken
  3. } from '@/utils/auth'
  4. import {
  5. getLocale
  6. } from '@/utils/index'
  7. import {
  8. $http
  9. } from '@escook/request-miniprogram'
  10. import store from '@/store'
  11. class Request {
  12. constructor(options = {}) {
  13. // 请求的根路径
  14. this.baseUrl = options.baseUrl || ''
  15. // 请求的 url 地址
  16. this.url = options.url || ''
  17. // 请求方式
  18. this.method = 'GET'
  19. // 请求的参数对象
  20. this.data = null
  21. // header 请求头
  22. this.header = options.header || {}
  23. this.beforeRequest = null
  24. this.afterRequest = null
  25. }
  26. get(url, data = {}) {
  27. this.method = 'GET'
  28. this.url = this.baseUrl + url
  29. this.data = data
  30. return this._()
  31. }
  32. post(url, data = {}) {
  33. this.method = 'POST'
  34. this.url = this.baseUrl + url
  35. this.data = data
  36. return this._()
  37. }
  38. put(url, data = {}) {
  39. this.method = 'PUT'
  40. this.url = this.baseUrl + url
  41. this.data = data
  42. return this._()
  43. }
  44. delete(url, data = {}) {
  45. this.method = 'DELETE'
  46. this.url = this.baseUrl + url
  47. this.data = data
  48. return this._()
  49. }
  50. _() {
  51. // 清空 header 对象
  52. this.header = {}
  53. // 请求之前做一些事
  54. this.beforeRequest && typeof this.beforeRequest === 'function' && this.beforeRequest(this)
  55. // 发起请求
  56. return new Promise((resolve, reject) => {
  57. let weixin = wx
  58. // 适配 uniapp
  59. if (typeof uni !== 'undefined') {
  60. weixin = uni
  61. }
  62. weixin.request({
  63. url: this.url,
  64. method: this.method,
  65. data: this.data,
  66. header: this.header,
  67. success: res => {
  68. if (this.afterRequest) {
  69. this.afterRequest(res)
  70. }
  71. },
  72. fail: err => {
  73. reject(err)
  74. },
  75. complete: res => {
  76. resolve(res.data)
  77. },
  78. })
  79. })
  80. }
  81. }
  82. const request = new Request()
  83. /**
  84. * 创建请求
  85. * @param baseURL
  86. */
  87. request.baseUrl = process.env.BASE_API
  88. request.config = {
  89. retry: 3,
  90. retryDelay: 1000,
  91. timeout: 50000,
  92. }
  93. request.beforeRequest = _request => {
  94. _request.header['Language-Set'] = getLocale()
  95. _request.header['X-Requested-With'] = 'XMLHttpRequest'
  96. const apiToken = getToken()
  97. if (apiToken) {
  98. _request.header.Authorization = `Bearer ${apiToken}`
  99. }
  100. }
  101. request.afterRequest = response => {
  102. console.log(response)
  103. if (response.header && response.header['authorization']) {
  104. // 刷新token
  105. const token = response.header['authorization'].replace('Bearer ', '')
  106. if (token !== store.getters.token) {
  107. store.commit('SET_TOKEN', token)
  108. }
  109. }
  110. const res = response.data
  111. if (res.ret !== 0) {
  112. if (res.ret === 401) {
  113. if (response.data.msg === 'Token has expired') {
  114. response.data.msg = '登录超时'
  115. }
  116. store.dispatch('fedLogOut').then(() => {
  117. uni.navigateTo({
  118. url: '/login-new'
  119. })
  120. })
  121. } else {
  122. uni.showModal({
  123. content: res.msg || 'Error',
  124. success(r) {
  125. if (r.confirm) {
  126. } else if (r.cancel) {
  127. }
  128. }
  129. })
  130. }
  131. return Promise.reject(new Error(res.msg || 'Error'))
  132. } else {
  133. return res
  134. }
  135. }
  136. export default request
  137. /**
  138. * GET请求
  139. * @param {Object} url
  140. * @param {Object} params
  141. */
  142. export const get = (url) => (params) => {
  143. return request.get(url, params)
  144. }
  145. /**
  146. * POST请求
  147. * @param {Object} url
  148. * @param {Object} params
  149. */
  150. export const post = (url) => (params) => {
  151. return request.post(url, params)
  152. }
  153. export const link = (url) => {
  154. return process.env.BASE_API + url
  155. }