service.js 2.3 KB

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