axios.js 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. import axios from "axios";
  2. import store from '@/store'
  3. import router from '@/router'
  4. const header = {
  5. // "X-Requested-With": "XMLHttpRequest",
  6. // "X-Frame-Options": "DENY", // 告诉浏览器不要(DENY)把这个网页放在iFrame内,通常的目的就是要帮助用户对抗点击劫持。
  7. // "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"
  8. };
  9. window.ajaxTimeout = 20000;
  10. export default async (
  11. url = "",
  12. data = {},
  13. type = "GET",
  14. params = {},
  15. headers = header,
  16. onUploadProgress
  17. ) => {
  18. type = type.toLowerCase();
  19. let obj = {
  20. method: type,
  21. baseURL: "",
  22. url: url,
  23. data,
  24. params,
  25. // // `onUploadProgress` 允许为上传处理进度事件
  26. // onUploadProgress: function(progressEvent) {
  27. // // 对原生进度事件的处理
  28. // },
  29. // // `onDownloadProgress` 允许为下载处理进度事件
  30. // onDownloadProgress: function(progressEvent) {
  31. // // 对原生进度事件的处理
  32. // },
  33. // `cancelToken` 指定用于取消请求的 cancel token
  34. // (查看后面的 Cancellation 这节了解更多)
  35. // cancelToken: new CancelToken(function (cancel) {
  36. // }),
  37. // processData: true, // 告诉axios不要去处理发送的数据(重要参数)
  38. timeout: window.ajaxTimeout,
  39. headers,
  40. onUploadProgress
  41. };
  42. if (onUploadProgress && typeof onUploadProgress === "function") {
  43. obj.onUploadProgress = onUploadProgress;
  44. }
  45. // return await axios(obj)
  46. // .then(response => {
  47. // return response;
  48. // })
  49. // .catch(res => {
  50. // return res;
  51. // });
  52. // 请求拦截器
  53. axios.interceptors.request.use(
  54. config => {
  55. if (!config.data.token) {
  56. config.data.token = localStorage.getItem("token")
  57. }
  58. return config;
  59. },
  60. error => {
  61. Toast.clear();
  62. // 错误抛到业务代码
  63. return Promise.reject(new Error("服务器异常,请联系管理员!"));
  64. }
  65. );
  66. // 添加响应拦截器
  67. axios.interceptors.response.use(
  68. response => {
  69. if (response.data.status == 404 || response.data.status == 405 || response.data.status == 10011) {
  70. store.dispatch('user/logout')
  71. router.push(`/login`)
  72. }
  73. return response;
  74. },
  75. error => {
  76. return Promise.reject(error.response.data)
  77. }
  78. )
  79. return new Promise((resolve, reject) => {
  80. axios(obj)
  81. .then(response => {
  82. if (response && response.status === 200) {
  83. let res = response.data
  84. resolve(res);
  85. } else {
  86. reject(response);
  87. }
  88. })
  89. .catch(res => {
  90. reject(res);
  91. });
  92. });
  93. };