使用koa实现前后端分离
发布于 7 年前 作者 zhoujian917 8286 次浏览 来自 问答

公司新业务要实现前后端分离,大致结构就是这样:java/php——》node(koa)——》vue/react,请问有大神做过这种业务吗?求教?求指导!!主要是不明白koa的充当什么角色,接口转发吗?

10 回复

java/php 作为底层数据层,做标准的 数据库表查询及功能接口。

node 作为中间层,功能很多。

  1. 根据针对业务场景,对同一前端界面的多次请求进行合并,统一发送给前端 =。=
  2. 可能会用到后端渲染,直接在 node 中渲染前端界面

其实后端如果给的格式符合前端要求 没必要koa。。如果给的结构不符合你的要求。。可以koa层用graphql做这样节约koa层的api结构设计和维护成本。

主要用于 BFF 层( Backend for FrontEnd / 粘合层),提供后端服务的聚合,还有前端视图渲染层的一些工程化配套。

image.png

为什么不能直接调用 php/java 的后端?

猜测应该是react做后端路由,java负责数据层接口开发,node做路由层以及数据处理,如果把react改成express模板开发,是比较常规的一种开发方式

学习了 自豪地采用 CNodeJS ionic

@rwing 跟语言关系不大,主要是要明确有这样的一个 BFF 层。

痛点:

  • 后端服务一般会微服务,搞原子化。
  • 用户侧(前端,客户端)则为了性能优化,要求后端返回的数据要聚合,要清洗。
  • 所以在实际业务中,往往会遇到前后端争吵,某个接口是否需要对返回的数据进行定制化,或者是对某几个接口的合并处理。
  • 后端追求稳定,发布周期较长,他们也不太 care 实际展示字段的几个小变更。

如何解决? BFF - Backend for Frontend,也可以理解为粘合层。

  • 自己的狗粮自己吃,用户侧开发者(前端,客户端)自己需要的数据,在自己的粘合层解决,BFF 的代码也是他自己维护。
  • BFF 可以用自己擅长的语言来实现,不一定非是 Node 什么的。
  • GraphQL 也可以理解为这里面的一种解决方案。
  • BFF 除了做数据的清洗组合外,往往还会配合用户侧的一些工程化方案,如我们这边之前做的 Pagelet 方案,就是需要在模板层读取构建好的前端资源依赖表,进行静态资源的请求优化,等等。
  • 前后端的界限,以前是 JS/CSS ↔ View/Controller/Service/DB ,现在是 JS/CSS/View/Controller ↔ Service/DB

@rwing 因为node在性能和高并发上有很好的优势,所以公司想使用node作为中间层

接口是PHP/java 提供的,那么 node 在前后端分离中充当什么角色呢,那就是路由和视图渲染,不过对于某些应用来说,完全可以用前端路由在做了,vue react都有对应的路由组件,所以这种情况下不也没node什么事了

又看了一遍,刷新个人理解!哈哈 From Noder

回到顶部