BFF架构和NestJS介绍

694 阅读2分钟

本文主要对NestJS相关做一下整理,正式开始之前先介绍一下当前使用场景。

BFF架构

这里先介绍一下当前相关架构

image.png

这里的项目指的是一个toc的控制台,包含web和小程序两端,由于两端的页面有所差异,因此所需字段也有所区别,再加上同一个数据可能来自于多个接口,因此引入了BFF层进行接口聚合和适配。

其他部分,api网关会接收所有处理,如果需要认证先经过认证处理后返回到网关,然后转发给bff,否则直接发到bff,然后再由bff访问具体的服务。

bff层使用的NestJS框架,因为

  • 对ts支持较好
  • 比较成熟,兼容express的插件,生态较好
  • 可扩展性好,提供了很多开箱即用的功能,比如微服务等

NestJS

nodejs提供了http模块用来监听端口,处理请求和返回响应,为了简化这一过程出现了express或koa等框架,但是这类框架也仅仅做了这些,没有解决架构问题。
因此我们这里使用了NestJS,其底层使用了express(还可以是fastify),因此可以直接发挥express及其生态的优势。

相关概念

NestJS中module类似于ui中的组件,每个应用至少包含一个root module,还可能包含其他feature module,不同module都在父级module注册,最终组合成整个应用。

image.png

为了更好的处理请求响应过程,nest引入了很多概念

image.png

  • middleware 类似于express的middleware,在收到请求和router处理之前调用,可以访问请求和响应对象,可以用来更改两个对象或者提前结束。
  • guard 用来鉴权,在middleware之后,interceptor or pipe之前调用
  • interceptor 在请求处理之前和之后执行指定逻辑
  • pipe 用来转换数据和验证数据
  • exception filter 用来捕获应用中未处理的异常,从而给用户对应提示

除了以上直接参与请求响应的,NestJS还有一个重要概念,即provider,我们可以用来将class依赖注入,即注册后由系统自动实例化,最常见的就是service,可以为controller处理具体的逻辑,比如crud。
除了注入class,还可以注入常量或工厂函数等。

其他

除了以上基本操作,NestJS还对其他功能进行了集成,比如数据库、配置等。