service.js 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. import Request from 'luch-request'
  2. import config from './config.js'
  3. // let baseURL = 'http://192.168.1.91:2888'
  4. // let baseURL = 'http://192.168.1.168:2888'
  5. let baseURL = config.baseURL
  6. let tokenUrl = baseURL +
  7. "/blade-auth/oauth/token?tenantId=000000&password=fd5ba907392066bc4fc27723a350b573&username=admin"
  8. //获取token
  9. const getTokenStorage = () => {
  10. let token = ''
  11. try {
  12. token = uni.getStorageSync('token')
  13. } catch (e) {}
  14. return token
  15. }
  16. const http = new Request()
  17. http.setConfig((config) => {
  18. /* 设置全局配置 */
  19. config.baseURL = baseURL /* 根域名不同 */
  20. config.header = {
  21. ...config.header,
  22. }
  23. return config
  24. })
  25. http.interceptors.request.use((config) => {
  26. /* 请求之前拦截器。可以使用async await 做异步操作 */
  27. config.header = {
  28. ...config.header,
  29. "Blade-Auth": getTokenStorage()
  30. }
  31. return config
  32. }, (config) => {
  33. return Promise.reject(config)
  34. })
  35. // 是否正在刷新的标记
  36. let isRefreshing = false
  37. // 重试队列,每一项将是一个待执行的函数形式
  38. let requests = []
  39. http.interceptors.response.use(async (response) => {
  40. /* 请求之后拦截器。可以使用async await 做异步操作 */
  41. //toekn过期处理
  42. //200 返回数据成功 0
  43. return response;
  44. }, async (err) => { // 请求错误做点什么
  45. console.log(err, 1234123);
  46. if (err.statusCode == 401) {
  47. let {
  48. config
  49. } = err
  50. if (!isRefreshing) {
  51. isRefreshing = true
  52. let token = uni.getStorageSync('token')
  53. let [, res] = await uni.request({
  54. url: tokenUrl,
  55. method: 'POST',
  56. header: {
  57. Authorization: "Basic c2FiZXI6c2FiZXJfc2VjcmV0"
  58. },
  59. })
  60. //否则保存新的token
  61. token = res.data.token_type + " " + res.data.access_token
  62. uni.setStorageSync('token', token)
  63. requests.forEach(cb => cb())
  64. // 重试完了清空这个队列
  65. requests = []
  66. isRefreshing = false
  67. return await http.request(config)
  68. } else {
  69. return new Promise((resolve) => {
  70. // 将resolve放进队列,用一个函数形式来保存,等token刷新后直接执行
  71. requests.push(() => {
  72. resolve(http.request(config))
  73. })
  74. })
  75. }
  76. } else {
  77. uni.showToast({
  78. title:err.data.msg,
  79. icon:"none"
  80. })
  81. return err.data
  82. }
  83. return Promise.reject(err)
  84. })
  85. export {
  86. http
  87. }