request.js 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import baseURL from '@/api/baseURL';
  2. let toastFlag = true; // msg toast提示 true:可提示
  3. async function goLogin(vm, msg) {
  4. // 去到登录页
  5. if (!toastFlag) return;
  6. await vm.$c.toast({ title: msg, mask: true });
  7. // 删除用户信息并且跳到登录页
  8. vm.$store.dispatch('user/ClearUserInfo');
  9. }
  10. module.exports = (vm) => {
  11. // 初始化请求配置
  12. uni.$u.http.setConfig((config) => {
  13. /* config 为默认全局配置*/
  14. config.baseURL = baseURL;
  15. config.timeout = 1000 * 60;
  16. return config;
  17. });
  18. // 请求拦截
  19. uni.$u.http.interceptors.request.use(
  20. (config) => {
  21. config.data = config.data || {};
  22. // 根据custom参数中配置的是否需要token,添加对应的请求头
  23. let token = vm.$store.state.user.token;
  24. if (token) {
  25. config.header['Authorization'] = token;
  26. }
  27. return config;
  28. },
  29. (config) => {
  30. return Promise.reject(config);
  31. }
  32. );
  33. // 响应拦截
  34. uni.$u.http.interceptors.response.use(
  35. (res) => {
  36. let data = res.data;
  37. const msg = data?.msg || '网络繁忙,请稍后再试';
  38. if (data.code === 200) {
  39. toastFlag = true; // 可提示
  40. if (res.config.header.resDetail) {
  41. return res; // 代表返回详情结果(包含响应头)
  42. }
  43. // 成功
  44. return res.data;
  45. }
  46. if (data.code === 401) {
  47. // 登录失效
  48. goLogin(vm, msg); // 退出登录并且清空用户信息
  49. toastFlag = false; // 不可提示
  50. return res.data;
  51. }
  52. vm.$c.toast(msg);
  53. return Promise.reject(`code:${data.code},msg:${msg}`);
  54. },
  55. async (res) => {
  56. // 对错误做出提示
  57. const msg = res.data?.msg || '网络繁忙,请稍后再试';
  58. if (res.statusCode === 401) {
  59. goLogin(vm, msg);
  60. toastFlag = false; // 不可提示
  61. return Promise.reject(res);
  62. }
  63. vm.$c.toast(msg);
  64. return Promise.reject(`code:${res.data.code},msg:${msg}`);
  65. }
  66. );
  67. };