request.js 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. /* src/utils/request.js */
  2. import axios from 'axios'
  3. // 如果你用了 Vant UI,可以把下面这行解开,用来弹窗提示错误
  4. import { showToast, showFailToast } from 'vant';
  5. import 'vant/es/toast/style';
  6. // 1. 创建 axios 实例
  7. const service = axios.create({
  8. // 基础 URL,通常在 .env 文件中配置 VUE_APP_BASE_API
  9. baseURL: process.env.VUE_APP_BASE_API || '/api',
  10. // 请求超时时间 (毫秒),交易类应用建议设置短一点,比如 10秒
  11. timeout: 10000,
  12. headers: {
  13. 'Content-Type': 'application/json;charset=utf-8'
  14. }
  15. })
  16. // 2. 请求拦截器 (Request Interceptor)
  17. // 在发送请求之前做些什么,比如加 Token
  18. service.interceptors.request.use(
  19. config => {
  20. // 假设你的 token 存在 localStorage 里
  21. const token = localStorage.getItem('token')
  22. if (token) {
  23. // 让每个请求携带自定义 token 请根据实际情况修改
  24. // 例如:config.headers['Authorization'] = 'Bearer ' + token
  25. config.headers['token'] = token
  26. }
  27. return config
  28. },
  29. error => {
  30. // 对请求错误做些什么
  31. console.log(error)
  32. return Promise.reject(error)
  33. }
  34. )
  35. // 3. 响应拦截器 (Response Interceptor)
  36. // 对响应数据做点什么
  37. service.interceptors.response.use(
  38. response => {
  39. const res = response.data
  40. // 这里根据后端返回的状态码来判断请求是否成功
  41. // 假设后端约定 code === 00000 为成功
  42. if (res.code !== "00000") {
  43. // 如果不是 200,说明业务逻辑有错,比如“余额不足”
  44. // showFailToast(res.msg || 'Error') // 如果用了 Vant,可以用这个提示
  45. console.error('业务报错:', res.msg)
  46. // 特殊处理:比如 401 表示 Token 过期,需要跳回登录页
  47. if (res.code === 401) {
  48. //以此处逻辑为准:清除本地数据,强制刷新或跳转
  49. localStorage.removeItem('token')
  50. location.reload()
  51. }
  52. return Promise.reject(new Error(res.msg || 'Error'))
  53. } else {
  54. // 成功,直接把数据剥离出来
  55. return res.data
  56. }
  57. },
  58. error => {
  59. console.log('网络报错' + error) // for debug
  60. let message = error.message
  61. if (message == 'Network Error') {
  62. message = '后端接口连接异常'
  63. } else if (message.includes('timeout')) {
  64. message = '系统接口请求超时'
  65. } else if (message.includes('Request failed with status code')) {
  66. message = '系统接口' + message.substr(message.length - 3) + '异常'
  67. }
  68. showFailToast(message)
  69. return Promise.reject(error)
  70. }
  71. )
  72. export default service