service.js 2.2 KB

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