index.js 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import axios from 'axios';
  2. // 简单的 Mock 拦截器
  3. const mockData = {
  4. '/api/user': { id: 1, name: '测试用户', email: 'test@example.com' },
  5. '/api/list': [{ id: 1, title: '项目1' }, { id: 2, title: '项目2' }],
  6. };
  7. // 模拟延迟
  8. const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
  9. // 设置 Mock 拦截器
  10. export function setupMock() {
  11. axios.interceptors.request.use(async (config) => {
  12. const url = config.baseURL + config.url;
  13. // 模拟 404 错误
  14. if (config.url?.includes('/not-found')) {
  15. await delay(300);
  16. const error = new Error('Request failed with status code 404');
  17. error.response = { status: 404, data: { message: 'Not Found' } };
  18. error.config = config;
  19. return Promise.reject(error);
  20. }
  21. // 模拟 500 服务器错误
  22. if (config.url?.includes('/server-error')) {
  23. await delay(300);
  24. const error = new Error('Request failed with status code 500');
  25. error.response = { status: 500, data: { message: 'Internal Server Error' } };
  26. error.config = config;
  27. return Promise.reject(error);
  28. }
  29. // 模拟超时错误
  30. if (config.url?.includes('/timeout')) {
  31. await delay(6000); // 超过 timeout 设置
  32. return config;
  33. }
  34. // 模拟网络错误
  35. if (config.url?.includes('/network-error')) {
  36. await delay(300);
  37. const error = new Error('Network Error');
  38. error.config = config;
  39. return Promise.reject(error);
  40. }
  41. // 正常 Mock 响应
  42. const mockKey = Object.keys(mockData).find((key) => url.includes(key));
  43. if (mockKey) {
  44. await delay(300);
  45. config.adapter = () => {
  46. return Promise.resolve({
  47. data: mockData[mockKey],
  48. status: 200,
  49. statusText: 'OK',
  50. headers: {},
  51. config,
  52. });
  53. };
  54. }
  55. return config;
  56. });
  57. console.log('[Mock] Mock 拦截器已启用');
  58. }