request.js 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. import axios from 'axios'
  2. import { Message } from 'element-ui'
  3. console.log(window)
  4. const service = axios.create({
  5. baseURL: window?._BASE_CONFIG?.API || '/api',
  6. withCredentials: true
  7. })
  8. /**
  9. * 请求拦截器
  10. * 统一处理请求拦截,如:添加token等
  11. */
  12. service.interceptors.request.use(
  13. (config) => {
  14. return config
  15. },
  16. (error) => {
  17. return Promise.reject(error)
  18. }
  19. )
  20. /**
  21. * 响应拦截器
  22. * 统一处理响应拦截
  23. * 如:重定向、消息提示等操作
  24. */
  25. service.interceptors.response.use(
  26. async (response) => {
  27. const { data } = response
  28. if (data?.code) {
  29. if (data.code !== '0000') {
  30. Message({
  31. message: data.msg || 'Error',
  32. type: 'error',
  33. duration: 5 * 1000
  34. })
  35. return Promise.reject(new Error(data.msg || 'Error'))
  36. } else {
  37. return data
  38. }
  39. } else if (data.type === 'application/octet-stream') {
  40. return response
  41. } else if (data.type === 'application/json') {
  42. const resData = JSON.parse(await data.text())
  43. console.log(resData)
  44. // 根据后端返回code码进行处理
  45. if (resData.code !== '0000') {
  46. Message({
  47. message: resData.msg || 'Error',
  48. type: 'error',
  49. duration: 5 * 1000
  50. })
  51. return Promise.reject(new Error(resData.msg || 'Error'))
  52. } else {
  53. return resData
  54. }
  55. }
  56. },
  57. (error) => {
  58. const { response } = error
  59. if (response?.status === 401) {
  60. window.location = response.data
  61. return
  62. }
  63. Message({
  64. message: error.message,
  65. type: 'error',
  66. duration: 5 * 1000
  67. })
  68. return Promise.reject(error)
  69. }
  70. )
  71. const request = (requestObj) => {
  72. const { url, method, data = {}, timeout, params, responseType } = requestObj
  73. return service({
  74. url,
  75. method: method || 'post',
  76. data,
  77. timeout: timeout || 300000,
  78. params: params || (method && method.toLowerCase() === 'get' ? data : {}),
  79. responseType: responseType || 'json'
  80. })
  81. }
  82. export default request