service.js 2.1 KB

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