1. request.use(async (ctx, next) => {
  2. const { req } = ctx;
  3. const { url } = req;
  4. // 判断是否需要添加前缀,如果是统一添加可通过 prefix、suffix 参数配置
  5. if (url.indexOf('/api') !== 0) {
  6. ctx.req.url = `/api${url}`;
  7. }
  8. await next();
  9. const { res } = ctx;
  10. if (0) {
  11. router.replace({
  12. pathname: '/user/login',
  13. search: stringify({
  14. redirect: window.location.href,
  15. }),
  16. });
  17. }
  18. })
  1. /**
  2. * request 网络请求工具
  3. * 更详细的 api 文档: https://github.com/umijs/umi-request
  4. */
  5. import { extend } from 'umi-request';
  6. import { notification } from 'antd';
  7. import router from 'umi/router';
  8. import { stringify } from 'querystring';
  9. const codeMessage = {
  10. 200: '服务器成功返回请求的数据。',
  11. 201: '新建或修改数据成功。',
  12. 202: '一个请求已经进入后台排队(异步任务)。',
  13. 204: '删除数据成功。',
  14. 400: '发出的请求有错误,服务器没有进行新建或修改数据的操作。',
  15. 401: '用户没有权限(令牌、用户名、密码错误)。',
  16. 403: '用户得到授权,但是访问是被禁止的。',
  17. 404: '发出的请求针对的是不存在的记录,服务器没有进行操作。',
  18. 406: '请求的格式不可得。',
  19. 410: '请求的资源被永久删除,且不会再得到的。',
  20. 422: '当创建一个对象时,发生一个验证错误。',
  21. 500: '服务器发生错误,请检查服务器。',
  22. 502: '网关错误。',
  23. 503: '服务不可用,服务器暂时过载或维护。',
  24. 504: '网关超时。',
  25. };
  26. /**
  27. * 异常处理程序
  28. */
  29. const errorHandler = error => {
  30. console.log(error, "-=-=-=")
  31. const { response } = error;
  32. console.log(error, response)
  33. if (response && response.status) {
  34. const errorText = codeMessage[response.status] || response.statusText;
  35. const { status, url } = response;
  36. notification.error({
  37. message: `请求错误 ${status}: ${url}`,
  38. description: errorText,
  39. });
  40. } else if (!response) {
  41. notification.error({
  42. description: '您的网络发生异常,无法连接服务器',
  43. message: '网络异常',
  44. });
  45. }
  46. return response;
  47. };
  48. /**
  49. * 配置request请求时的默认参数
  50. */
  51. const request = extend({
  52. headers: { 'Content-Type': 'multipart/form-data' },
  53. // prefix: '/v1/',
  54. errorHandler,
  55. credentials: 'include', // 默认请求是否带上cookie
  56. // getResponse: true, // 响应信息
  57. });
  58. request.use(async (ctx, next) => {
  59. const { req } = ctx;
  60. const { url } = req;
  61. // 判断是否需要添加前缀,如果是统一添加可通过 prefix、suffix 参数配置
  62. if (url.indexOf('/api') !== 0) {
  63. ctx.req.url = `/api${url}`;
  64. }
  65. await next();
  66. const { res } = ctx;
  67. if (0) {
  68. router.replace({
  69. pathname: '/user/login',
  70. search: stringify({
  71. redirect: window.location.href,
  72. }),
  73. });
  74. }
  75. })
  76. export default request;

参考

https://github.com/umijs/umi-request/blob/HEAD/README_zh-CN.md#%E4%BE%8B%E5%AD%90