request.js 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import axios from 'axios'
  2. import storage from 'store'
  3. import notification from 'ant-design-vue/es/notification'
  4. import { VueAxios } from './axios'
  5. // 创建 axios 实例
  6. const request = axios.create({
  7. // API 请求的默认前缀
  8. baseURL: process.env.VUE_APP_API_BASE_URL,
  9. timeout: 60000 // 请求超时时间
  10. })
  11. // 异常拦截处理器
  12. const errorHandler = (error) => {
  13. if (error.response) {
  14. const data = error.response.data
  15. if (error.response.status === 400) {
  16. notification.error({
  17. message: '该功能需要egg服务',
  18. description: data.message
  19. })
  20. }
  21. if (error.response.status === 403) {
  22. notification.error({
  23. message: 'Forbidden',
  24. description: data.message
  25. })
  26. }
  27. if (error.response.status === 401 && !(data.result && data.result.isLogin)) {
  28. notification.error({
  29. message: 'Unauthorized',
  30. description: 'Authorization verification failed'
  31. })
  32. }
  33. }
  34. return Promise.reject(error)
  35. }
  36. // request interceptor
  37. request.interceptors.request.use(config => {
  38. const token = storage.get('token')
  39. // 如果 token 存在
  40. // 让每个请求携带自定义 token 请根据实际情况自行修改
  41. if (token) {
  42. config.headers['Access-Token'] = token
  43. }
  44. return config
  45. }, errorHandler)
  46. // response interceptor
  47. request.interceptors.response.use((response) => {
  48. return response.data
  49. }, errorHandler)
  50. const installer = {
  51. vm: {},
  52. install (Vue) {
  53. Vue.use(VueAxios, request)
  54. }
  55. }
  56. export default request
  57. export {
  58. installer as VueAxios,
  59. request as axios
  60. }