request.js 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import Axios from 'axios'
  2. import { Message } from 'view-design'
  3. import { getToken, setToken, getAdmin } from 'libs/token'
  4. // 根路径
  5. import baseURL from 'config/url'
  6. const service = Axios.create({
  7. baseURL,
  8. // withCredentials: true, // 当跨域请求时发送cookie
  9. timeout: 100000
  10. })
  11. // 保存调用栈
  12. // let time = null
  13. // 设置请求拦截器,每个请求都会到这里
  14. service.interceptors.request.use(
  15. config => {
  16. if (getToken()) {
  17. // 给每个请求都加上后台需要的信息,可以自定义
  18. config.params = Object.assign({
  19. token: getToken(),
  20. user_id: getAdmin().admin_id
  21. }, config.params || {})
  22. }
  23. // 在发送请求之前还能做点东西
  24. // 拦截器函数, 要求返回config参数
  25. return config
  26. }, error => {
  27. // 当报错的时候可以打印日志
  28. console.log(error)
  29. return Promise.reject(error)
  30. }
  31. )
  32. // 设置响应拦截器,每个响应都会到这里
  33. service.interceptors.response.use(
  34. response => {
  35. // 当获得响应数据,可以根据响应的状态码判断后台状态
  36. const { data } = response
  37. // 处理后端响应数据状态码不在预设值得情况下,处理异常,这里预设值为2000
  38. if (data.code && data.code != 0) {
  39. // 再进一步判断
  40. if (data.code == 3101 || data.code == 3005) {
  41. data.code == 3005 && Message.error({ content: 'token过期,请重新登录' })
  42. app.$router.push('/login')
  43. setToken('')
  44. } else {
  45. // 非特定情况
  46. if (data.msg) Message.error({ content: data.msg, background: true })
  47. }
  48. // 抛出错误信息
  49. return Promise.reject(data)
  50. } else {
  51. return Promise.resolve(data)
  52. }
  53. }, error => {
  54. console.log('err' + error) // 帮助debug
  55. // Message.error({
  56. // content: '接口报错了,请稍后重试~',
  57. // background: true
  58. // })
  59. return Promise.reject(error)
  60. }
  61. )
  62. export default service