request.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. /**
  2. * 封装的axios的工具类
  3. * 负责请求的公共配置,以及请求拦截,响应拦截,错误处理,网络不佳处理
  4. */
  5. import axios from 'axios';
  6. import { Toast, Dialog } from 'vant';
  7. import errorCode from '@/utils/errorCode';
  8. axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8';
  9. const service = axios.create({
  10. baseURL: process.env.VUE_APP_BASE_API,
  11. timeout: 30000,
  12. withCredentials: true,
  13. });
  14. // request拦截器
  15. service.interceptors.request.use(
  16. (config) => {
  17. config.headers['userId'] = localStorage.getItem('loginName');
  18. return config;
  19. },
  20. (error) => {
  21. Promise.reject(error);
  22. }
  23. );
  24. // 响应拦截器
  25. service.interceptors.response.use(
  26. (res) => {
  27. const code = res.data.code || 200;
  28. const msg = errorCode[code] || res.data.msg || errorCode['default'];
  29. if (res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer') {
  30. return res.data;
  31. }
  32. if (code === 401) {
  33. Toast('认证信息未通过');
  34. } else if (code === 500) {
  35. // Toast({
  36. // message:msg,
  37. // duration:5000
  38. // });
  39. return res.data;
  40. } else if (code !== 200) {
  41. Toast({
  42. message: msg,
  43. duration: 5000,
  44. });
  45. } else {
  46. return res.data;
  47. }
  48. },
  49. (error) => {
  50. let { message } = error;
  51. if (message == 'Network Error') {
  52. message = '网络异常';
  53. } else if (message.includes('timeout')) {
  54. message = '请求超时';
  55. } else if (message.includes('Request failed with status code')) {
  56. message = '系统接口' + message.substr(message.length - 3) + '异常';
  57. }
  58. Toast(message);
  59. return Promise.reject(error);
  60. }
  61. );
  62. export default service;