axios.ts 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import axios from 'axios'
  2. import { ElMessage } from 'element-plus'
  3. import { useRouter } from 'vue-router'
  4. const router = useRouter()
  5. const instance = axios.create({
  6. baseURL: `http://${import.meta.env.VITE_APP_SERVICE_HOST}:9002/`,
  7. timeout: 10000,
  8. })
  9. // 请求拦截器
  10. instance.interceptors.request.use(
  11. (config) => {
  12. // 添加头部token
  13. const token = localStorage.getItem('token')
  14. if (token) {
  15. config.headers.Authorization = token
  16. }
  17. return config
  18. },
  19. (error) => {
  20. return Promise.reject(error)
  21. },
  22. )
  23. // 响应拦截器
  24. instance.interceptors.response.use(
  25. (response) => {
  26. if (response.status !== 200) {
  27. ElMessage.error('请求失败')
  28. return Promise.reject(new Error('请求失败'))
  29. }
  30. const {
  31. data: { code },
  32. } = response
  33. if (code !== 0) {
  34. if (code === 40001) {
  35. localStorage.removeItem('token')
  36. ElMessage.error('登录过期,请重新登录')
  37. router.replace('/login')
  38. return Promise.reject(new Error('登录过期,请重新登录'))
  39. }
  40. ElMessage.error(response.data.message)
  41. return Promise.reject(response.data || {})
  42. }
  43. return response.data
  44. },
  45. (error) => {
  46. let msg = '请求失败'
  47. if (error.response && error.response.data && error.response.data.message) {
  48. msg = error.response.data.message
  49. }
  50. if (error.status !== 200) {
  51. ElMessage.error(msg)
  52. return Promise.reject(new Error(msg))
  53. }
  54. return Promise.reject(error)
  55. },
  56. )
  57. export default instance