image.png

index.js - 封装axios

src/request/index.js 基础模板

  1. import axios from 'axios'
  2. const instance = axios.create({
  3. baseURL: '/yuantiku_api', // 通过使用配置的proxy来解决跨域
  4. timeout: 5000
  5. });
  6. // 添加请求拦截器
  7. instance.interceptors.request.use(function (config) {
  8. let token = localStorage.getItem("x-auth-token");
  9. if (token) {
  10. config.headers = {
  11. "x-auth-token": token
  12. }
  13. }
  14. return config;
  15. }, function (error) {
  16. // 对请求错误做些什么
  17. return Promise.reject(error);
  18. });
  19. // 添加响应拦截器
  20. instance.interceptors.response.use(function (response) {
  21. // 对响应数据做点什么
  22. return response.data;
  23. }, function (error) {
  24. // 对响应错误做点什么
  25. return Promise.reject(error);
  26. });
  27. export default instance;

src/request/index.js 在上边基础上加上token过期判断 & 弹窗提示

  1. import axios from 'axios'
  2. import store from '../store'
  3. const instance = axios.create({
  4. baseURL: '/yuantiku_api', // 通过使用配置的proxy来解决跨域
  5. // baseURL: 'https://www.ahsj.link/rambo', // 通过使用配置的proxy来解决跨域
  6. timeout: 5000
  7. });
  8. // 添加请求拦截器
  9. instance.interceptors.request.use(function (config) {
  10. let token = localStorage.getItem("x-auth-token");
  11. if (token) {
  12. config.headers = {
  13. "x-auth-token": token
  14. }
  15. }
  16. //弹窗提示
  17. store.dispatch({type: "showToastFn" , value: {
  18. icon: "loading",
  19. title: "数据加载中..."
  20. }})
  21. return config;
  22. }, function (error) {
  23. // 对请求错误做些什么
  24. return Promise.reject(error);
  25. });
  26. // 添加响应拦截器
  27. instance.interceptors.response.use(function (response) {
  28. //关闭弹窗
  29. store.dispatch({type: "hideToastFn"});
  30. // 对响应数据做点什么
  31. return response.data;
  32. }, function (error) {
  33. //过期
  34. if(error.response.data.errCode===1002){
  35. // token过期,先告诉用户登录失效,并且重新登录
  36. store.dispatch({type: "showToastFn" , value: {
  37. icon: "none",
  38. title: "登录失效,请重新登录"
  39. }})
  40. setTimeout(()=>{
  41. // 关闭alert
  42. store.dispatch({type: "hideToastFn"});
  43. // 跳转页面,开发阶段由于都是在localhost:8080根路径下开发,所以可以直接href跳转
  44. window.location.href = "./login"
  45. // 项目上线,由于路由模式改成了HashRouter,所以应该修改的是hash
  46. // window.location.hash = "#/login"
  47. }, 2000)
  48. }
  49. // 对响应错误做点什么
  50. return Promise.reject(error);
  51. });
  52. export default instance;

api.js

src/request/api.js

  1. import request from './request'
  2. // 接口
  3. export const HomeApi = () => request.get("/6666")
  4. //组件调用
  5. import {HomeApi} from 'api.js'
  6. async function xx(){
  7. let res = await HomeApi()
  8. }