request.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. const Fly = require("../lib/wx.umd.min") //wx.js is your downloaded code
  2. const fly = new Fly(); //Create an instance of Fly
  3. const app = getApp()
  4. fly.config.timeout = 20000;
  5. fly.config.baseURL = "https://wx.sgsino.cn"
  6. const newFly = new Fly();
  7. newFly.config = fly.config;
  8. let reqCount = 0 ;// 重发请求的次数
  9. // 获取白名单
  10. import whiteList from './whiteList';
  11. // Add interceptors
  12. fly.interceptors.request.use((request) => {
  13. // console.log('进入fly-request', request);
  14. wx.showLoading({
  15. 'title': '加载中',
  16. 'mask': true
  17. });
  18. // 不显示加载页面的接口
  19. if (request.url.indexOf(whiteList.loading) === -1) {
  20. // 隐藏loading遮罩
  21. wx.hideLoading();
  22. }
  23. // 白名单内url不添加token
  24. if (request.url.indexOf(whiteList.nullHeaderToken) !== -1) {
  25. request.timeout = 30000; // 请求超时
  26. request.headers = {
  27. 'content-type': 'application/json',
  28. 'X-Tag': 'flyio'
  29. };
  30. console.log('nullHeaderToken()')
  31. return request;
  32. }
  33. //头文件带Authorization为请求token,不添加token
  34. if (request.headers.Authorization) {
  35. // 给所有请求添加自定义header
  36. request.timeout = 30000;
  37. Object.assign(request.headers, {
  38. 'content-type': 'application/json',
  39. 'X-Tag': 'flyio'
  40. })
  41. return request;
  42. }
  43. //其他请求需要在头文件中自动附加token
  44. if(wx.getStorageSync('token')) {
  45. // 给所有请求添加自定义header
  46. request.timeout = 30000;
  47. Object.assign(request.headers, {
  48. 'content-type': 'application/json',
  49. 'X-Tag': 'flyio',
  50. 'Authorization': `Bearer ${wx.getStorageSync('token')}`
  51. })
  52. return request;
  53. }
  54. }, (error, promise) => {
  55. // Do something with request error
  56. console.log(error); // for debug
  57. promise.reject(error)
  58. });
  59. fly.interceptors.response.use(
  60. (response) => {
  61. //正常返回
  62. reqCount =0;
  63. wx.hideLoading();
  64. return response
  65. },
  66. (err, promise) => {
  67. wx.hideLoading();
  68. let msg = '';
  69. if (err.status === 0) {
  70. msg = '网络连接异常'
  71. }
  72. else if (err.status === 1) {
  73. msg = '网络连接超时'
  74. }
  75. else if (err.status === 401) {
  76. reqCount += 1
  77. wx.clearStorageSync('token')
  78. if (reqCount < 3) {
  79. msg = '用户已过期,正在自动刷新用户,尝试次数'+reqCount.toString();
  80. this.lock(); //锁定响应拦截器
  81. wx.login({ success(wxres) {
  82. newFly.request(
  83. { url: '/auth/mobile/token/social?grant_type=mobil&mobile=MINI@'+ wxres.code,
  84. method: 'post',
  85. headers:{ 'Authorization': 'Basic dGVzdDp0ZXN0'}})
  86. .then(res => { if (res.data.access_token) {wx.setStorageSync('token', res.data.access_token); }})
  87. .finally(() => this.unlock())
  88. .then(() => { return fly.request(err.request); })}})
  89. }
  90. }
  91. else if (err.status === 502) {
  92. reqCount += 1
  93. if (reqCount < 3) {
  94. msg = '网络错误,正在进行自动重试,重试次数'+reqCount.toString();
  95. return fly.request(err.request);
  96. }
  97. }
  98. else {
  99. if (err.response.data.message) {
  100. msg = err.response.data.message
  101. } else {
  102. msg = '程序已3次连接失败,请稍后手动登录后再试'
  103. }
  104. }
  105. wx.showToast({
  106. title: msg,
  107. icon: 'none',
  108. duration: 3000
  109. });
  110. return promise.resolve(err)
  111. }
  112. )
  113. export default fly;