结合目录,粗略看了一遍 NestJS 文档的主要内容,记录每一章节的内容,方便后续快速进入对应章节,找到内容。
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 专为单元测试而设计,通过自动模拟类的外部依赖关系来简化测试过