当前位置:   article > 正文

uniapp中request请求token失效后重新获取token且重新请求_uni-request 监听失败重新发起请求

uni-request 监听失败重新发起请求

        在APP日常使用过程中可能遇到token过期或者token失效的情况;平常大家的做法就是给个提示,然后需要再次请求一次接口重新获取token,这样的操作给用户一种极不友好的体验,为了让用户感觉不到重新获取token这个场景,那么就需要在用户不知情的情况下重新获取token且再次重新请求接口使操作流程不中断。

        本次给大家介绍在请求接口request内建立重试机制,该机制统一封装在一个request请求中。

  1. import Url from "../config/urlConfig.js"
  2. import getToken from "@/common/getToken.js" //封装获取token的方法
  3. /**
  4. * header参数设置
  5. * @param {Object} header
  6. */
  7. function headers(header) {
  8. let headers = {};
  9. let Token = uni.getStorageSync("token")
  10. if (Token.length!==0) { //有token的情况下设置token
  11. let token = {"token":Token};
  12. headers = Object.assign(token,header);
  13. }else {
  14. headers = header;
  15. }
  16. return headers;
  17. }
  18. /**
  19. * 请求封装
  20. * @param {Object} url
  21. * @param {Object} method
  22. * @param {Object} data
  23. * @param {Object} headers
  24. * @param {Object} resType
  25. */
  26. function request(url,method,data,header,resType) {
  27. return new Promise((resolve,reject)=>{
  28. uni.request({
  29. url: Url() + url,
  30. method: method || 'GET',
  31. data: data || {},
  32. header: header || {},
  33. responseType: resType,
  34. success: (res)=>{
  35. if(res.data.code===401) { //请求接口返回401(token异常)后直接返回401
  36. resolve(401)
  37. }else {
  38. resolve(res); //没有401时返回响应数据
  39. }
  40. },
  41. fail: (err)=>{
  42. reject(err);
  43. }
  44. })
  45. })
  46. }
  47. /**
  48. * export请求;请求重试机制
  49. * @param {Object} url
  50. * @param {Object} method
  51. * @param {Object} data
  52. * @param {Object} headers
  53. * @param {Object} resType
  54. */
  55. export default (url,method,data,header,resType)=>{
  56. return new Promise((resolve,reject)=>{
  57. request(url,method,data,headers(header),resType).then(res=>{
  58. if(res===401) { //接口请求401,401是request请求手动抛出的401
  59. getToken().then(res=>{ //接口重试,在获取到token以后对请求失败的接口再次请求;这儿可以根据自己的需要自己定义
  60. request(url,method,data,headers(header),resType).then(res=>{
  61. resolve(res)
  62. })
  63. })
  64. }else { //没有token异常时直接返回响应数据
  65. resolve(res)
  66. }
  67. }).catch(err=>{reject(err)})
  68. })
  69. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/231310
推荐阅读
相关标签
  

闽ICP备14008679号