request.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. import {baseApiUrl} from './config.js'
  2. import {apiWechatLogin} from '@/api/user'
  3. import CryptoJS from './crypto'
  4. import store from '@/store/index'
  5. // 请求错误消息提示
  6. const showError=error=>{
  7. let errMsg=''
  8. switch(error.code){
  9. case 400:
  10. errMsg=error.msg;
  11. break;
  12. default:
  13. errMsg=error.msg;
  14. break;
  15. }
  16. uni.showToast({
  17. title:errMsg,
  18. icon:'none'
  19. })
  20. }
  21. // 微信登录
  22. const wechatLogin=()=>{
  23. return new Promise((resolve,reject)=>{
  24. uni.login({
  25. provider: 'weixin',
  26. success: function (loginRes) {
  27. apiWechatLogin({code:loginRes.code}).then(res=>{
  28. if(res.code===200){
  29. store.commit('setToken', res.data.authorization)
  30. resolve(res.data)
  31. }
  32. })
  33. },
  34. fail:function(loginErr){
  35. uni.showToast({
  36. title:"微信登录失败",
  37. icon:"none"
  38. })
  39. }
  40. })
  41. })
  42. }
  43. let requestList=[]//存放token失效时请求队列
  44. let isRefreshing=false//是否正在刷新token
  45. /**
  46. * 刷新token
  47. */
  48. const refreshToken=async (url,params,method,resolve)=>{
  49. requestList.push(()=>{resolve(http(url,params,method))})
  50. if(!isRefreshing){
  51. isRefreshing=true
  52. const wechatLoginRes=await wechatLogin()
  53. console.log(wechatLoginRes);
  54. if(!wechatLoginRes.is_bind){
  55. uni.reLaunch({
  56. url:'/pages/login'
  57. })
  58. return
  59. }
  60. // 重新请求队列
  61. requestList.map(MT=>{MT()})
  62. requestList=[]
  63. isRefreshing=false
  64. }
  65. }
  66. let LOADINGCOUNT = 0;// 请求数
  67. const http=(url,params,method)=>{
  68. // 设置loading
  69. if (LOADINGCOUNT === 0) {
  70. uni.showLoading({
  71. title:'加载中...'
  72. })
  73. }
  74. LOADINGCOUNT++;
  75. return new Promise((resolve,reject)=>{
  76. uni.request({
  77. url:baseApiUrl+url,
  78. data:params,
  79. method:method,
  80. header:{
  81. Authorization:store.state.user.token,
  82. },
  83. success(e) {
  84. // let res=JSON.parse(CryptoJS.Des3Decrypt(e.data));//解密
  85. let res=e.data
  86. if(res.code!==200&&res.code!==403&&res.code!==4001){
  87. showError(res)
  88. }
  89. // 401 token失效
  90. if(res.code===401){
  91. refreshToken(url,params,method,resolve)
  92. return
  93. }
  94. resolve(res)
  95. },
  96. fail(error) {
  97. console.log(error);
  98. uni.showToast({
  99. title:'服务器错误',
  100. icon:'none'
  101. })
  102. },
  103. complete() {
  104. // 关闭loading
  105. LOADINGCOUNT--;
  106. if (LOADINGCOUNT === 0) {
  107. uni.hideLoading()
  108. }
  109. }
  110. })
  111. })
  112. }
  113. // get 请求
  114. export const httpGet=(url,params)=>{
  115. return http(url,params,'GET')
  116. }
  117. // post 请求
  118. export const httpPost=(url,params)=>{
  119. return http(url,params,'POST')
  120. }