本文档全面介绍了NestJS框架、其核心原则、架构和能力。它为理解NestJS应用程序的结构以及各个组件如何相互交互奠定了基础。有关微服务或GraphQL等子系统的具体实现细节,请参阅本Wiki中的相应部分。
NestJS是一个渐进式的Node.js框架,用于构建高效、可扩展且面向企业的服务器端应用程序。它使用TypeScript构建,并利用了TypeScript的强类型能力,同时与纯JavaScript兼容。NestJS融合了面向对象编程(OOP)、函数式编程(FP)和函数响应式编程(FRP)的元素。
该框架提供了受Angular启发的强大架构基础,对于熟悉Angular结构和依赖注入系统的开发人员尤其具有吸引力。NestJS通过提供开箱即用的、一致的、有约束的结构,解决了Node.js应用程序架构的常见挑战。
来源: Readme.md24-33 package.json1-5
NestJS围绕几个关键原则构建
架构设计旨在创建以下应用程序:
来源: Readme.md30-33 packages/core/Readme.md26-33
NestJS的架构由几个核心组件组成,这些组件协同工作以提供一个统一的框架
来源: package.json1-5 Readme.md24-33
NestJS架构的核心是其模块系统。每个NestJS应用程序至少有一个模块——根模块。模块用于组织应用程序组件,并将功能分离成可重用、连贯的块。
模块系统的关键特性
典型的模块定义
模块有助于在应用程序组件之间保持清晰的界限,并通过NestJS依赖注入系统促进依赖管理。
有关模块系统的更多详细信息,请参阅 模块系统。
来源: sample/06-mongoose/package.json1-5
NestJS实现了一个强大的依赖注入(DI)容器,该容器管理应用程序组件的创建和生命周期。DI系统是NestJS最显著的特性之一,深受Angular DI系统的启发。
DI系统自动解析依赖项
有关依赖注入系统的详细信息,请参阅 依赖注入系统。
NestJS实现了一个复杂的请求处理管道,该管道通过一系列组件处理传入的请求,每个组件都有特定的职责
管道中的每个组件都承担着特定的职责,遵循单一职责原则。这种管道架构实现了关注点的清晰分离,并使应用程序更易于维护。
有关请求处理管道的更多详细信息,请参阅 请求处理管道。
NestJS被设计为平台无关的,允许它与不同的HTTP服务器实现配合使用。默认情况下,NestJS使用Express,但它也可以与Fastify配合使用。
平台适配器模式允许NestJS
Express是NestJS的默认HTTP平台。它提供了
有关Express集成的更多信息,请参阅 Express集成。
可以使用Fastify作为Express的替代品以获得更好的性能
有关Fastify集成的更多信息,请参阅 Fastify集成。
来源: packages/platform-express/Readme.md1-15 packages/platform-fastify/Readme.md1-15
NestJS通过专用包(@nestjs/microservices)提供一流的微服务支持。这使得构建具有各种传输机制的分布式系统成为可能。
NestJS微服务的关键方面
有关微服务的全面信息,请参阅 微服务。
来源: packages/microservices/Readme.md1-15
NestJS可以通过专用包或社区模块与各种数据库技术集成。
最常用的数据库集成包括
TypeORM是TypeScript和JavaScript的强大ORM,支持SQL和NoSQL数据库
Mongoose是MongoDB的ODM(对象文档映射器)
Sequelize是Node.js的传统ORM
有关数据库集成的更多详细信息,请参阅 数据库集成。
来源: sample/06-mongoose/package.json22-29 sample/14-mongoose-base/package.json22-28
NestJS通过@nestjs/graphql包提供了对GraphQL应用程序的出色支持,该包是Apollo Server的包装器。
NestJS提供两种GraphQL方法
代码优先方法使用TypeScript类和装饰器来生成GraphQL模式
有关代码优先方法的更多详细信息,请参阅 代码优先方法。
模式优先方法从GraphQL SDL(模式定义语言)开始
有关模式优先方法的更多详细信息,请参阅 模式优先方法。
来源: sample/23-graphql-code-first/package.json22-34 sample/12-graphql-schema-first/package.json22-35 sample/22-graphql-prisma/package.json22-36
NestJS通过@nestjs/websockets包提供了对WebSocket的内置支持,从而实现了服务器与客户端之间的实时通信。
WebSocket支持的关键方面
有关WebSocket支持的更多详细信息,请参阅 WebSocket。
来源: packages/websockets/Readme.md1-15 packages/platform-socket.io/Readme.md1-15 packages/platform-ws/Readme.md1-15
NestJS 提供了一个专用的测试包(@nestjs/testing),以便于测试使用该框架构建的应用程序。
NestJS 中的测试工具支持:
有关测试工具的更多详细信息,请参阅测试。
来源: packages/testing/Readme.md1-15
NestJS 是一个用于使用 Node.js 构建服务器端应用程序的全面框架。其架构围绕模块化、依赖注入和定义明确的请求处理管道而设计。该框架为各种用例提供了广泛的支持,包括 REST API、微服务、GraphQL、WebSockets 等。
NestJS 的关键优势包括:
通过利用这些功能,开发人员可以使用 NestJS 构建可维护、可扩展且可测试的服务器端应用程序。