【AntDesign】封装全局异常处理-全局拦截器

打印 上一主题 下一主题

主题 863|帖子 863|积分 2591

目录

场景

本文前端用的是阿里的Ant-Design框架,其他框架也有全局拦截器,思路是相同,具体实现自行百度下吧
因为每次都需要调接口,都需要单独处理异常情况(code !=0),因此前端需要对后端返回的通用响应进行统一处理,比如

  • 业务异常提示
    从 response取出code,根据code中集中处理错误,比如提示用户未登录、参数为空等
  • 直接返回业务内容
​                从 response取出data,进行返回,而不是每次返回全部json内容
1 定义全部异常处理类

新建新的ts类,比如globalRequest.ts
该类处理两个情况

  • 所有请求拦截器(request.interceptors.request)
    在请求后端API前,统一做处理,比如 改变url参数,附带统一参数等
  • 所有响应拦截器(request.interceptors.response)
    接收来自后端返回结果后,统一处理地方,比如异常处理提示
更详细的 api 文档: https://github.com/umijs/umi-request
  1. /**
  2. * request 网络请求工具
  3. * 更详细的 api 文档: https://github.com/umijs/umi-request
  4. */
  5. import {extend} from 'umi-request'; // 需集成类
  6. import {message} from "antd"; // 提示框
  7. import {history} from "@@/core/history";
  8. import {stringify} from "querystring";
  9. /**
  10. * 配置request请求时的默认参数
  11. */
  12. const request = extend({
  13.     credentials: 'include', // 默认请求是否带上cookie
  14.     // requestType: 'form',
  15. });
  16. /**
  17. * 所有请求拦截器
  18. *  1. 在请求后端API前,统一做处理,比如 改变url参数,附带统一参数等
  19. */
  20. request.interceptors.request.use((url, options) => {
  21.     // 打印每次请求的API
  22.     console.log(`do request url = ${url}`);
  23.     return {
  24.         url,
  25.         options: {
  26.             ...options,
  27.             // headers: {},
  28.         },
  29.     };
  30. });
  31. /**
  32. * 所有响应拦截器
  33. *  1. 接收来自后端返回结果后,统一处理地方,比如异常处理提示
  34. */
  35. request.interceptors.response.use(async response => {
  36.         const res = await response.clone().json();
  37.         if (res.code === 0) {
  38.             // 成功,则取出 data内容 直接返回
  39.             return res.data;
  40.         }
  41.         if (res.code === 40100) {       // 未登录错误码
  42.             message.error('请先登录');
  43.             // 跳转登录地址
  44.             history.replace({
  45.                 pathname: '/user/login',
  46.                 search: stringify({
  47.                     redirect: location.pathname,
  48.                 }),
  49.             });
  50.         } else {
  51.             message.error(res.description)
  52.         }
  53.         return res.data;
  54.     }
  55. );
  56. export default request;
复制代码
2 替换request引用

将原来的request引用,替换成自己的request,在api.ts类中修改
原来
  1. import {request} from 'umi';
复制代码
替换成
  1. import request from '@/plugins/globalRequest';
复制代码

3 代码优化

优点:

  • 省去每个业务异常处理
  • 直接返回 data 内容

总结

加了全局异常处理类后,实际上是通过request和response拦截器实现的,少处理很多冗余代码,代码更加简洁和优雅了!!!
本文由博客一文多发平台 OpenWrite 发布!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

tsx81428

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表