service.js 2.5 KB

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