index.js 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. /**
  2. * Copyright © 2020 suxinghua. All rights Reserved.
  3. */
  4. import axios from "./axios";
  5. // import { getToken } from "@u/auth";
  6. /**
  7. * axios defaults 配置
  8. */
  9. axios.defaults = {
  10. baseUrl: "https://www.huijy.net",
  11. timeout: 60000,
  12. };
  13. /**
  14. * 全局 请求拦截器, 支持添加多个拦截器
  15. * 例如: 配置token、添加一些默认的参数
  16. * `return config` 继续发送请求
  17. */
  18. axios.interceptors.request.use(
  19. (config) => {
  20. // 设置Token
  21. // config.data = {
  22. // ...config.data,
  23. // token: getToken()
  24. // };
  25. return config;
  26. },
  27. (error) => {
  28. // 做一些请求错误
  29. console.error(error);
  30. return Promise.reject(error);
  31. }
  32. );
  33. /**
  34. * 全局 响应拦截器, 支持添加多个拦截器
  35. * 例如: 根据状态码选择性拦截、过滤转换数据
  36. * @param {Object} res 请求返回的数据
  37. * @return {Promise<reject>}
  38. */
  39. axios.interceptors.response.use(
  40. async (res) => {
  41. const { data, statusCode: status } = res;
  42. try {
  43. return await handleCode({ data, status });
  44. } catch (err) {
  45. return Promise.reject(err);
  46. }
  47. },
  48. (err) => {
  49. // 做一些请求错误
  50. console.error(err);
  51. return Promise.reject(err);
  52. }
  53. );
  54. /**
  55. * 处理 HTTP 状态码
  56. * @param data {Object} 请求返回的数据
  57. * @param status {String} HTTP状态码
  58. * @returns {Promise<never>|*}
  59. */
  60. function handleCode({ data, status }) {
  61. const STATUS = {
  62. "200"() {
  63. return data;
  64. },
  65. "400"() {
  66. return Promise.reject(new Error("请求错误"));
  67. },
  68. "401"() {
  69. return Promise.reject(new Error("请求未授权"));
  70. },
  71. "403"() {
  72. return Promise.reject(new Error("拒绝请求"));
  73. },
  74. "500"() {
  75. return Promise.reject(new Error("服务器错误"));
  76. },
  77. };
  78. // 有状态码但不在这个封装的配置里,就直接返回错误
  79. return STATUS[status]
  80. ? STATUS[status]()
  81. : Promise.reject(new Error(data.data || "请求错误"));
  82. }
  83. export default axios;