黑白梦

NestJS 文档目录概览

结合目录,粗略看了一遍 NestJS 文档的主要内容,记录每一章节的内容,方便后续快速进入对应章节,找到内容。

文档地址 https://docs.nestjs.com/

Introduction 介绍

Introduction 介绍了 nest 解决架构的问题,以及它的安装方法。

Overview 概述

介绍了各方面基础概念及用法,这一章节比较常用。

  • First steps 第一步,安装及文件结构介绍
  • Controllers 控制器,介绍了控制器相关的内容,路由定义、状态码、请求、参数等
  • Providers 提供者,依赖注入的概念和操作方法
  • Modules 模块,介绍模块声明、导出、全局模块等
  • Middleware 中间件,中间件定义与使用
  • Exception filters 异常过滤器,抛出异常、内置HTTP异常、异常过滤器等
  • Pipes 管道,验证管道、整型解析管道、全局注册管道等
  • Guards 守卫,用于身份验证机制,登录校验、RBAC校验等
  • Interceptors 拦截器,AOP 的应用,在方法执行之前/之后绑定额外逻辑、转换返回的结果、转换抛出的异常、扩展基本功能行为等
  • Custom decorators 自定义路由装饰器,介绍了自带的param装饰器、自定义装饰器传输数据、创建组合装饰器等

Fundamentals 基本原则

依赖注入的一些深入的概念,这一章节对于开发业务来说目前暂时用得不多。

  • Custom providers 自定义提供者, DI基础知识及应用
  • Asynchronous providers 异步提供者,如数据库连接时使用
  • Dynamic modules 动态模块,配置化模块,在导入该模块时自定义该模块的属性和行为,
  • Injection scopes 指定注入的作用域,默认情况下使用单例作用域,可使用 REQUEST 注入作用域,只对当次请求生效
  • Circular dependency 循环依赖,前向引用,解决模块循环依赖
  • Module reference 模块引用,导航内置的提供者列表,通过其注入令牌获取提供者
  • Lazy-loading modules 延迟加载模块,可用于解决 serverless 的冷启动瓶颈
  • Execution context 执行上下文,一些工具类,提供了有关当前执行上下文的信息,获取 HTTP 应用程序上下文、请求和响应对象、反射和元数据等。
  • Lifecycle events 生命周期事件,应用程序初始化、运行和终止
  • Platform agnosticism 平台无关,可重用
  • Testing 测试,单元测试、端到端测试等

Techniques 技术

各种技术的整合,这一章节比较常用。

  • Configuration 配置,加载适当的 .env 文件
  • Database SQL 数据库,介绍了 TypeORM 、Sequelize 的接入使用
  • Mongo 与MongoDB数据库集成
  • Validation 验证,ValidationPipe、ParseIntPipe 的使用
  • Caching 缓存,内置内存缓存,也可切换为 Redis
  • Serialization 序列化,配合 class-transformer 使用
  • Versioning URI 版本控制
  • Task scheduling 任务调度,设定定时任务等
  • Queues 队列,集成 Bull Queues,它使用 Redis 来保存作业数据
  • Logging 日志,介绍内置日志功能,也介绍生产应用程序一般使用 Winston 专用日志记录模块
  • Cookies 介绍了 Express 和 Fastify 中的 Cookie 用法
  • Events 事件监听,提供了一个简单的观察者实现,允许订阅和侦听各种事件
  • Compression 压缩,减小响应体的大小,提高 Web 应用速度,但更建议在 nginx 中压缩
  • File upload 文件上传,仅提供了 Express 的示例
  • Streaming files 流式传输文件,返回一个 StreamableFile 实例
  • HTTP module HTTP 客户端包,用于发起请求,基于 axios
  • Session 介绍了 Express 和 Fastify 中的 Session 用法
  • Model-View-Controller 控制器视图模板渲染
  • Performance (Fastify) 性能,介绍切换为 Fastify
  • Server-Sent Events 服务器发送事件

Security 安全

按需查阅,用于项目配置。

  • Authentication 认证,利用守卫实现身份认证、JWT 、全局启用身份验证等
  • Authorization 授权,利用守卫实现 RBAC
  • Encryption and Hashing 加密和哈希,提供了加解密方法,以及使用 bcrypt 哈希的方法
  • Helmet 设置 HTTP 标头使得免受某些众所周知的 Web 漏洞的侵害,支持 Express 和 Fastify
  • CORS 设置允许跨域的方法
  • CSRF Protection CSRF保护,支持 Express 和 Fastify
  • Rate limiting 速率限制,支持定制排除限制

GraphQL

一种用于 API 的查询语言,暂时用不到。

WebSockets

WebSocket 是一种网络通信协议,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的一种。

  • Gateways 网关,现成支持两个 WS 平台:socket.io 和 WS
  • Exception filters 异常过滤器,与 HTTP 一致,应该抛出 WsException
  • Pipes 管道,与 HTTP 一致,抛出异常时使用 WsException ,所有管道将仅应用于 data 参数
  • Guards 守卫,与 HTTP 一致,抛出异常时使用 WsException
  • Interceptors 拦截器,与 HTTP 一致,还可以使用网关范围的拦截器
  • Adapters 适配器,适配 WebSockets 调用的底层实现

Microservices 微服务

Nest 原生支持微服务架构风格的开发,Nest 支持多种内置传输层实现,称为传输器,它们负责在不同的微服务实例之间传输消息。

  • Overview 概述,介绍了微服务的安装、通信、超时处理等,默认使用 TCP 传输层
  • Redis 使用 Redis 传输层去实现微服务,实现了发布/订阅消息传递范式,已发布的消息可按频道分类
  • MQTT 使用 MQTT 传输层去实现微服务,基于 MQTT 构建的通信系统由发布服务器、代理和一个或多个客户端组成。
  • NATS 使用 NATS 传输层去实现微服务
  • RabbitMQ 使用 RabbitMQ 传输层去实现微服务
  • Kafka 使用 Kafka 传输层去实现微服务
  • gRPC 使用 gRPC 传输层去实现微服务
  • Custom transporters 自定义传输层
  • Exception filters 异常过滤器,与 HTTP 一致,应该抛出 RpcException
  • Pipes 管道,与 HTTP 一致,抛出异常时使用 RpcException
  • Guards 守卫,与 HTTP 一致,抛出异常时使用 RpcException
  • Interceptors 拦截器,与 HTTP 一致,还可以使用控制器范围的拦截器

Standalone Apps 独立应用程序

Standalone Apps 可用于实现脚本、CLI等,不启动网络服务。

CLI 脚手架工具

  • Overview 概述,介绍脚手架语法、支持的命令
  • Workspaces 工作区,nest 支持标准模式和 monorepo 模式,介绍了二者 CLI 用法的不同,介绍了 nest-cli.json 配置文件的属性说明
  • Libraries 库,支持创建不能独立运行的库项目,对库的内置支持仅适用于 monorepos 中
  • Usage 用法(重点),CLI 部分主要查看这篇即可,提供了常用的大部分命令和参数
  • Scripts 脚本, nest 命令与编译器和脚本交互

OpenAPI

  • Introduction 介绍,通过装饰器生成 OpenAPI 规范,安装启动,文档选项、设置选项等
  • Types and Parameters 类型和参数,使用装饰器注释类属性,指定类型
  • Operations 操作,设置标签、请求头、状态码等
  • Security 安全,如内置的 Bearer authentication 请求头认证
  • Mapped Types 可从 @nestjs/swagger 包导出 PartialType 所有属性都设置为可选 、PickType 选取一组属性来构造新类型、OmitType 删除一组特定的键来构造类型、IntersectionType 合并类型等
  • Decorators 装饰器,介绍了所有可用的 OpenAPI 装饰器,它们都有一个 Api 前缀
  • CLI Plugin CLI 插件,配置自动生成请求和响应类型
  • Other features 其他功能,全局前缀、全局参数
  • Migration guide @nestjs/swagger 4.0 版中的以下破坏性更改

Recipes 秘诀

  • REPL 简单的交互式环境,接受单个用户输入,执行它们,并将结果返回给用户
  • CRUD generator CRUD 生成器,生成模块、服务、控制器类、实体类
  • SWC (fast compiler) 使用 SWC 提升编译速度
  • Passport (auth) 使用 Passport 库实现身份验证、JWT 等功能
  • Hot reload 热重载, 通过 webpack HMR 热模块替换,不需要每次更改时重新编译整个项目
  • MikroORM 使用 MikroORM 管理数据库
  • TypeORM 从零使用 TypeORM 管理数据库,实际时只需使用 @nestjs/typeorm
  • Mongoose 从零使用 Mongoose 管理 MongoDB ,实际时只需使用 @nestjs/mongoose
  • Sequelize 从零使用 Sequelize 管理数据库 ,实际时只需使用 @nestjs/sequelize
  • Router module 路由器模块,可给指定模块的所有路由增加前缀
  • Swagger 接口文档生成,在 OpenAPI 中已涵盖
  • Health checks 运行状况检查,通过 Terminus 集成
  • CQRS 命令和查询责任分离
  • Compodoc 利用 Angular 的文档工具 Compodoc 编写文档
  • Prisma 使用 Prisma 管理数据库
  • Serve static 静态服务
  • Commander 编写命令行应用程序
  • Async local storage 异步本地存储,
  • Automock 专为单元测试而设计,通过自动模拟类的外部依赖关系来简化测试过