前语

Nest中有兼容不同http服务的适配器、装饰器语法、中间件机制等等,那这些是怎么体现在Nest源码文件结构上的呢,一起来看看。

GitHub下载一份源码,执行:

git clone --depth=1 --single-branch https://github.com/nestjs/nest.git

–depth=1会下载最近的单个commit,–single-branch来取单个分支,这样速度就快很多了,拉源码看一般都这么干,我这儿拉的是10.2.7版别。

顶级目录

去除一些不相关的目录文件和隐藏文件夹,这些文件的作用如下:

根目录
|————benchmarks     # 官方寄存功能测验相关的代码和脚本
|————integration    # 官方寄存集成测验相关的代码和脚本,用于测验多个模块和组件之间彼此交互的测验
|————packages       # 包含ts配置文件和官方仓库中所有的package的源代码
|————sample         # 官方供给可直接运行的项目示例代码
|————scripts        # 各种东西链的脚本,比方项目build、supertest集成测验、deploy布置等
|————tools          # 寄存gulp东西打包、文件移动相关脚本,一起还有功能测验相关脚本东西

别的需求补充一点:

sample中寄存项目示例代码,官网演示的实例代码也是用这儿的,后面咱们也会经过调试里边的项目来解说不同中心模块的原理;

packages目录咱们会要点重视,它包含了所有Nest包源代码;

tools寄存gulp构建东西,Nest在打包的时分会将packages下的文件移动到node_modules中,core文件夹最终会经过@nestjs/core来引进,一起发布到npm上的也是这种模块包。

从Nest源码目录规划,你能学到什么?

packages目录

来详细看看packages下面都有哪些文件

packages目录
|————common
|————core
|————microservices
|————platform-express
|————platform-fastify
|————platform-socket.io
|————platform-ws
|————websockets
|————testing

common 目录

Nest公共模块文件夹,如:

  • decorator装饰器
  • exceptions反常处理
  • enums枚举类
  • utils东西类

这些是全渠道通用的API,比方装饰器、http状况码、http请求方法、反常处理等这些都是一样的,属于同一套笼统,不可能不同渠道搞出不一样的笼统出来,下面先简略看看:

Request请求对象装饰器:

从Nest源码目录规划,你能学到什么?

http状况码枚举类:

从Nest源码目录规划,你能学到什么?

core 目录

Nest重头戏,包含根底架构和中心模块,是咱们要点重视的文件夹,它里边有:

  • adapters适配器
  • discovery查找器
  • guards护卫
  • interceptors拦截器
  • router路由程序
  • middlewares中间件
  • services服务

咱们在写Nest项目时会高频运用到这些模块,后面会详细介绍,再来看看其他文件夹。

microservices目录

寄存微服务模块,寄存了用于创建客户端的Microservices Client,答应与Nest微服务甚至其他微服务(如Java、Python)进行通讯交互,定义了Nest用于通讯的各种协议接口,如gRPC、AMQP、NATS、Redis 等,还供给了与外部服务(如kafka、MQTT)进行音讯通讯。

如果不知道微服务,这就类比微前端,微前端便是凭借这种思维衍生出来的,不同前端运用之间能够进行通讯,Nest也能够。

接下来便是适配不同渠道、不同场景的通讯协议(结构)。

|————platform-express
|————platform-fastify
|————platform-socket.io
|————platform-ws
|————websockets

platform-express、platform-fastify

platform-express和platform-fastify是Nest中用于集成express和fastify服务器结构的,默认是运用Express作为根底结构,但Nest并不依靠他们之中恣意一个。

而Fastify是一个更快速、低开支的 Web 结构,对功能要求高的运用场景会运用到它,Nest都兼容了,任开发者挑选。

platform-socket.io、platform-ws

这两个模块都是为了在Nest中完成websocket通讯而规划的,platform-socket.io是为了与Socket.IO 库进行集成,它供给了全双工通讯的能力,一般运用在实时通讯和推送的事务中,比方聊天室、实时数据更新这些。

另一方面,Nest也考虑了不运用Socket.IO库的场景,而是直接运用原生websocket进行通讯,platform-ws能够支持对原生websocket的通讯,一般运用在轻量级的双向通讯场景,比方实时监控、实时数据交互等。

能够看到上面还有一个websockets文件夹,这个便是Nest完成websocket通讯的中心逻辑,platform-socket.io和platform-ws这两个模块都需求依靠它。

从Nest源码目录规划,你能学到什么?

从Nest源码目录规划,你能学到什么?

小结

Nest中心的文件夹就这些,来总结一下从文件目录的规划上咱们能看出什么:

  • 明晰共同性:文件夹结构应该明晰明晰,遵从共同的命名标准
  • 分层结构:Nest中分层是做得很好的,如操控层、服务层、数据拜访层
  • 模块化结构:代码依照功能模块安排,每个模块遵从单一责任原则并尽可能复用,如http状况码、程序关闭信号等,而在咱们日常开发中,如订单流转状况、物流状况一样能够经过这种方法管理。
  • 遵从最佳实践:遵从特定的规划模式、代码风格,关于这点咱们会在后面的解说中逐步呈现Nest高雅之处。