request.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. const API = require("../config/api")
  2. let antiShake = false
  3. const request = (url, data, method = 'GET') => {
  4. return new Promise((resolve, reject) => {
  5. let header = {
  6. "Content-Type": "application/json"
  7. }
  8. const res = uni.getStorageSync('storage_key');
  9. const token = res.token
  10. if (token) {
  11. header['Authorization'] = token
  12. }
  13. uni.request({
  14. url: url,
  15. data: data,
  16. method: method,
  17. header: header,
  18. success: async res => {
  19. if (res.statusCode == 200) {
  20. if (res.data.code === "200" || res.data.code === "") {
  21. resolve(res.data)
  22. } else if (res.data.code === "20004" || res.data.code === "20005") {
  23. if(token){
  24. // refreshToken
  25. try {
  26. await refreshToken();
  27. // 重新发送上一次请求
  28. setTimeout(async () => {
  29. const retryRequest = await request(url, data, method)
  30. resolve(retryRequest)
  31. },500)
  32. } catch (e) {
  33. goLogin()
  34. }
  35. }else{
  36. goLogin()
  37. }
  38. } else {
  39. uni.showToast({
  40. title: res.data.message,
  41. icon: "none"
  42. })
  43. }
  44. } else {
  45. reject(res)
  46. }
  47. },
  48. fail: res => {
  49. reject(res)
  50. }
  51. })
  52. });
  53. }
  54. //不带token接口请求,首页
  55. const request1 = (url, data, method = 'GET') => {
  56. return new Promise((resolve, reject) => {
  57. let header = {
  58. 'Content-Type': 'application/json',
  59. 'tenant': 'MDAwMA==',
  60. }
  61. uni.request({
  62. url: url,
  63. data: data,
  64. method: method,
  65. header: header,
  66. success: res => {
  67. if (res.data.code === "200" || data.code === "") {
  68. resolve(res.data)
  69. } else {
  70. reject(res)
  71. }
  72. },
  73. fail: res => {
  74. reject(res)
  75. }
  76. })
  77. });
  78. }
  79. // refreshToken
  80. const refreshToken = () => {
  81. // 防抖
  82. if(antiShake) return
  83. antiShake = true
  84. setTimeout(()=>{
  85. antiShake = false
  86. },3000)
  87. return new Promise((resolve, reject) => {
  88. let header = {
  89. "Content-Type": "application/json"
  90. }
  91. const res = uni.getStorageSync('storage_key');
  92. const token = res.token
  93. if (token) {
  94. header['Authorization'] = token
  95. }
  96. const data = {
  97. refreshToken: res.refreshToken
  98. }
  99. console.log("原有token过期,请求refreshToken")
  100. uni.request({
  101. url: API.RefreshToken,
  102. data: data,
  103. method: "POST",
  104. header: header,
  105. success: res => {
  106. if (res.statusCode == 200) {
  107. if (res.data.code === "200" || res.data.code === "") {
  108. resolve(res.data.data)
  109. uni.setStorageSync('storage_key', res.data.data);
  110. return
  111. }
  112. }
  113. reject()
  114. goLogin()
  115. },
  116. fail: res => {
  117. reject(res)
  118. goLogin()
  119. }
  120. })
  121. });
  122. }
  123. const goLogin = () => {
  124. uni.removeStorageSync("storage_key")
  125. uni.navigateTo({
  126. url: '/pages_category_page2/userModule/login'
  127. })
  128. }
  129. module.exports = {
  130. request: request,
  131. request1: request1
  132. }