request.js 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  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 === 403) {
  16. notification.error({
  17. message: 'Forbidden',
  18. description: data.message
  19. })
  20. }
  21. if (error.response.status === 401 && !(data.result && data.result.isLogin)) {
  22. notification.error({
  23. message: 'Unauthorized',
  24. description: 'Authorization verification failed'
  25. })
  26. }
  27. }
  28. return Promise.reject(error)
  29. }
  30. // request interceptor
  31. request.interceptors.request.use(config => {
  32. const token = storage.get('token')
  33. // 如果 token 存在
  34. // 让每个请求携带自定义 token 请根据实际情况自行修改
  35. if (token) {
  36. config.headers['Access-Token'] = token
  37. }
  38. return config
  39. }, errorHandler)
  40. // response interceptor
  41. request.interceptors.response.use((response) => {
  42. return response.data
  43. }, errorHandler)
  44. const installer = {
  45. vm: {},
  46. install (Vue) {
  47. Vue.use(VueAxios, request)
  48. }
  49. }
  50. export default request
  51. export {
  52. installer as VueAxios,
  53. request as axios
  54. }