学习 Antd Pro 前后端分离

1.前言

最近学习reactjs ,前些年用RN开发过移动端,入门还算轻松。现在打算使用 Antd Pro 实现前后端分离。要使用Antd Pro这个脚手架,必须熟悉 umi、dva、redux-saga 等相关知识。

基础知识及目录结构可以先看官方文档 : https://pro.ant.design/docs/getting-started-cn

官方介绍:

Ant Design Pro 是一个企业级中后台前端/设计解决方案,我们秉承 [Ant Design](http://ant.design/) 的设计价值观,致力于在设计规范和基础组件的基础上,继续向上构建,提炼出典型模板/业务组件/配套设计资源,进一步提升企业级中后台产品设计研发过程中的『用户』和『设计者』的体验。

2. 网络请求库添加钩子

钩子的目的主要是对请求头设置(如:添加 token,api服务端通过token鉴权,当然您的token格式也可以是jwt,我这里是自己加密后的字符串)和对请求返回的数据实现拦截过滤特殊处理。

antd pro 使用的是 umi-request.js 这个库,其实也是基于 fetch 封装 。 一开始用axios替换了request.js里面。后来发现umi-request 也很容添加钩子,这里在umi-request上添加。

添加拦截钩子

  • 提交请求格式(根据你的api服务选择):

    payload(json格式提交) : ‘Content-Type‘: ‘application/json‘,

    formData (表单格式提交) : ‘Content-Type‘: ‘application/x-www-form-urlencoded‘

  • token:

    系统用户登录后存储在 localStorage -> zone-token

  • 返回拦截 :(request.interceptors.response):

    我的api返回格式是:{code:int,msg:string,data:object}

    通过返回的code值 提示 token 过期 、token校验失败,做相应处理(跳出登录等等处理)

    或其他特殊码(code)提示及处理

src\utils\request.js 调整后代码

/**
 * request 网络请求工具
 */
import { extend } from ‘umi-request‘;
import { notification } from ‘antd‘;
import router from ‘umi/router‘;

const codeMessage = {
  200: ‘服务器成功返回请求的数据。‘,
  201: ‘新建或修改数据成功。‘,
  202: ‘一个请求已经进入后台排队(异步任务)。‘,
  204: ‘删除数据成功。‘,
  400: ‘发出的请求有错误,服务器没有进行新建或修改数据的操作。‘,
  401: ‘用户没有权限(令牌、用户名、密码错误)。‘,
  403: ‘用户得到授权,但是访问是被禁止的。‘,
  404: ‘发出的请求针对的是不存在的记录,服务器没有进行操作。‘,
  406: ‘请求的格式不可得。‘,
  410: ‘请求的资源被永久删除,且不会再得到的。‘,
  422: ‘当创建一个对象时,发生一个验证错误。‘,
  500: ‘服务器发生错误,请检查服务器。‘,
  502: ‘网关错误。‘,
  503: ‘服务不可用,服务器暂时过载或维护。‘,
  504: ‘网关超时。‘,
};

/**
 * 异常处理程序
 */
const errorHandler = error => {
  const { response = {} } = error;
  const errortext = codeMessage[response.status] || response.statusText;
  const { status, url } = response;

  if (status === 401) {
    notification.error({
      message: ‘未登录或登录已过期,请重新登录。‘,
    });
    // @HACK
    /* eslint-disable no-underscore-dangle */
    window.g_app._store.dispatch({
      type: ‘login/logout‘,
    });
    return;
  }
  notification.error({
    message: `请求错误 ${status}: ${url}`,
    description: errortext,
  });
  // environment should not be used
  if (status === 403) {
    router.push(‘/exception/403‘);
    return;
  }
  if (status <= 504 && status >= 500) {
    router.push(‘/exception/500‘);
    return;
  }
  if (status >= 404 && status < 422) {
    router.push(‘/exception/404‘);
  }
};

/**
 * 配置request请求时的默认参数
 */
const request = extend({
  errorHandler, // 默认错误处理
  credentials: ‘include‘, // 默认请求是否带上cookie
});

request.interceptors.request.use(async (url, options) => {
  let token = localStorage.getItem("zone-token");
  const headers = {
    ‘Content-Type‘: ‘application/json‘,
    //‘Content-Type‘: ‘application/x-www-form-urlencoded‘,
    ‘Accept‘: ‘application/json‘,
  };

  if (token) {
    headers[‘token‘] = token;
  } 

  return (
    {
      url: url,
      options: { ...options, headers: headers },
    }
  );
})

request.interceptors.response.use((response, options) => {
  //拦截返回后的特殊处理
  // if(response.data.code == 1000001){
  //   console.log(response.data.msg)
  //   //通过返回的code 提示 token 过期 、token校验失败,做相应跳转
  // }
  return response;
});

export default request;

3. 权限及登录调整

前后台整理中,后在写。。。。。

原文地址:https://www.cnblogs.com/arlin321/p/11739248.html

时间: 2024-08-30 16:25:17

学习 Antd Pro 前后端分离的相关文章

从壹开始前后端分离【 .NET Core2.0 Api + Vue 3.0 + AOP + 分布式】框架之九 || 依赖注入IoC学习 + AOP界面编程初探

代码已上传Github,文末有地址 说接上文,上回说到了<从壹开始前后端分离[ .NET Core2.0 Api + Vue 2.0 + AOP + 分布式]框架之八 || API项目整体搭建 6.3 异步泛型+依赖注入初探>,后来的标题中,我把仓储两个字给去掉了,因为好像大家对这个模式很有不同的看法,嗯~可能还是我学艺不精,没有说到其中的好处,现在在学DDD领域驱动设计相关资料,有了好的灵感再给大家分享吧. 到目前为止我们的项目已经有了基本的雏形,后端其实已经可以搭建自己的接口列表了,框架已

SpringBootSecurity学习(12)前后端分离版之简单登录

前后端分离 前面讨论了springboot下security很多常用的功能,其它的功能建议参考官方文档学习.网页版登录的形式现在已经不是最流行的了,最流行的是前后端分离的登录方式,前端单独成为一个项目,与后台的交互,包括登录认证和授权都是由异步接口来实现.在前后端不分离的应用模式中,前端页面看到的效果都是由后端控制,由后端渲染页面或重定向,也就是后端需要控制前端的展示,前端与后端的耦合度很高.这种应用模式比较适合纯网页应用, 但是当后端对接App时,App可能并不需要后端返回一个HTML网页,而

SpringBootSecurity学习(13)前后端分离版之JWT

JWT 使用 前面简单介绍了把默认的页面登录改为前后端分离的接口异步登录的方法,可以帮我们实现基本的前后端分离登录功能.但是这种基本的登录和前面的页面登录还有一个一样的地方,就是使用session和cookie来维护登录状态,这种方法的问题在于,扩展性不好.单机当然没有问题,如果是服务器集群,或者是跨域的服务导向架构,就要求 session 数据共享,每台服务器都能够读取 session. 一种解决方案是 session 数据持久化,写入redis或别的持久层.各种服务收到请求后,都向持久层请求

一个简单粗暴的前后端分离方案

项目背景 刚刚参加完一个项目,背景:后端是用java,后端服务已经开发的差不多了,现在要通过web的方式对外提供服务,也就是B/S架构.后端专注做业务逻辑,不想在后端做页面渲染的事情,只向前端提供数据接口.于是协商后打算将前后端完全分离,页面上的所有数据都通过ajax向后端取,页面渲染的事情完全由前端来做.另外还有一个紧急的情况,项目要紧急上线,整个web站点的开发时间只有两周,两周啊!于是在这样的背景下,决定开始一次前后端完全分离的尝试. 之前开发都是同步渲染和异步渲染混搭的,有些东西可以有后

关于Web前后端分离的体验

由于公司有一个特殊的项目,以前是完全用php(smarty)写的一个程序,现在要转向php+node.因此一不小心又给后端同学们灌输了下用node做前后端分离的思想. 以前在知乎上答过这样的问题.大概如下 http://www.zhihu.com/question/26835139 由于目前正在做angular的项目,因此体验更加深刻. 现在再来说一下前后端分离的想法吧,还是有点借鉴http://ued.taobao.org/blog/2014/04/full-stack-development

前后端分离及React的一些研究

前言 在对英才网企业线前端不断的完善过程中,我们尝试进行了前后端分离,引入Node环境.以及在使用React的过程中,自行开发DOM渲染框架,解决React兼容低版本IE的问题,在这个过程中,我们有了一些经验和体会,希望本文对您有所帮助. 为什么前后端分离 原有架构下,后端系统基于Java语言实现,通过Velocity模板实现服务器端渲染,前端同学维护静态资源,在维护页面状态时,还需要模板和脚本互传参数,模板中还会有很多UI逻辑,等等,前后端耦合很深,这种模式下开发效率非常低,联调成本非常高,同

移动端开发者眼中的前端开发流程变迁与前后端分离

写在最开始 移动端与前端的区别 前端开发的混沌时代 后端 MVC MVC 方案实现 MVC 的缺点与改进 前端只写 Demo HTML 模板 后端 MVC 架构总结 AJAX 与前端 MVC 前后端分离的缺点 双端 MVC 不统一 SEO 性能不够 集中 Or 分离 Nodejs 前后端分离的哲学 Nodejs 分层 实战应用 风险控制 总结 参考资料 写在最开始 这是一篇面向移动端开发者的科普性文章,从前端开发的最初流程开始,结合示范代码,讨论开发流程的演变过程,希望能覆盖一部分前端开发技术栈

理解什么是前后端分离

HTML.CSS.JS. AJAX或Fetch. 学习一个前端的框架, React或者Vue或者Angularjs2都可以. 学会一个前端的路由框架, 如React-Router或者Vue-Router. 在学会3的基础上你肯定已经搭建好前端的开发环境了,所有和后端的交互走AJAX或者Fetch. SpringMVC 不再返回一个视图, 直接返回JSON. 前端从后端获取的所有数据都是JSON,至于怎么去更新页面, 你学会3后你肯定已经知道了. 页面跳转相关的东西你学会4后你肯定已经知道了. 既

前后端分离实践(试探篇)

按照以往的开发模式,前端人员制作好静态页面交给与后端人员进行动态嵌套开发.迭代模式带来一系列问题,静态页面套成动态后,一些操作.业务.模版技术等动态页面已经跟静态页面有了一些差距.这时候前端人员改了一个BUG,或者叠加了一个功能,后端人员就必须向前端人员了解更改的范围,再叠加,由于都是人为过程,带来很多困扰,开发效率也很低. 当前后端页面以及逻辑没有合并之前,测试人员面临等待的问题,能否让测试与开发并行也是我们需要考虑的一个问题. 这时候我们想到了,能否以暴露服务的方式把java的接口暴露出来交