2021 年,JavaScript 是使用最广泛的编程语言。
正如大量支持 JavaScript 编程的框架所见,这项技术的吸引力是不可否认的。
前端有 Angular、React 和 Vue,后端有 Express 和 Next,仅举几例。
有这么多美妙的 JavaScript 后端编程框架可供访问,您可能会想为什么我会搜索不同的东西,而不是简单地使用 Express 或 Next。
也许您需要使用一个体面的样板快速启动开发过程,并且手动添加新控制器和服务会让您生病。
或者您想创建易于管理的大型、可扩展软件。 或者,也许您只是希望以更高效、更方便的方式工作。
无论您的情况如何,Nest.js 都可以成为满足您需求的完美解决方案。
这篇文章将提供 NestJS 的见解以及实践经验。
什么是 NestJS?
巢穴 是一个渐进的 Node 框架,它是开源的、可扩展的和适应性强的 .js 用于构建、参与和挑战后端系统的框架。 它现在是增长速度最快的节点。
用于 js 的 TypeScript 框架。 NestJS 用于创建可扩展、可测试和松散连接的应用程序。
它增加了 Node.js 的可扩展性。 Js 服务器已经提升到一个全新的水平。 支持的数据库包括 PostgreSQL、MongoDB 和 MySQL。
NestJS 是可扩展的,因为它可以与其他库一起使用; 灵活,因为它具有适应性强的成熟生态系统。 因为它支持 JavaScript 特性和设计原则,所以它是渐进的。
它主要受 Angular、React 和 Vue 的影响,并带有内置的依赖注入。
特征
- 它易于使用、学习和掌握。
- 它是免费的并且 开放源码 (麻省理工学院许可证)
- 强大的命令行界面 (CLI) 可提高生产力并简化开发
- 易于使用的单元测试程序
- TypeScript 是一种紧密类型的语言,它是 JavaScript 的超集。
- 开发和维护一个活跃的代码库。
- 支持数百个特定于嵌套的模块,使与 TypeORM、Mongoose、GraphQL、日志记录、验证、缓存、WebSockets 等流行技术和想法的交互变得简单。
NestJS 的构建块是什么?
下面列出了 Nest 应用程序的构建组件; 还有其他的,但这三个是最重要的。 让我们快速看看它们。
1。 控制器
控制器负责处理传入的请求和响应客户端。 它接收特定的 HTTP 请求,路由系统确定哪个控制器获得哪个请求。
然后它起草一个合适的答案发送出去。 在类和装饰器的帮助下,构建了一个简单的收集器,每个控制器都有自己的一组路由来执行各种任务。
2。 供应商
提供者是 Nest 的一个关键思想。 许多核心的 Nest 类——服务、存储库、工厂、助手等等——都可以作为提供者来处理。
提供者的基本概念是它可以作为依赖注入; 这意味着对象可以相互形成各种关联,并且“连接”对象实例的角色可以主要外包给 Nest 运行时系统。
3.模块
模块是一个带有 @Module() 装饰器的类,用于组织应用程序结构的组件。 每个应用程序都有一个根模块,用于构建应用程序图,从而进一步解决提供者和模块之间的依赖关系和交互。
这个装饰器为 Nest.js 提供元数据,以便识别应用程序代码中将使用哪些组件、控制器或其他资源,并将它们组合成一个集合。
每个模块都有一系列以某种方式连接的功能。
NestJS 入门
1。 安装
让我们按照以下步骤安装 NestJS 并使用它创建一个项目:
因此,将创建以下目录结构:
2。 控制器
Nest 的构建块是控制器。 这些是处理入站请求的位置。 您可以使用 HTTP 方法修饰符(Get、Post、Put、Delete 等)装饰器指定路由路径,如下面的代码所示。
Nestjs 采用装饰器方法,主要使用 Typescript 开发,尽管它也支持 JavaScript。 您还可以使用类验证器来验证请求正文。
我只是要创建一个 Nestjs 服务器实例并全局添加 ValidationPipe。 管道只是在控制器之前执行的方法。 管道也可以使用 @UsePipes 装饰器在方法/参数级别应用。
3。 供应商
提供者是 Nestjs 的另一个关键组件。 到目前为止,我将数据存储在一个临时变量中。 这就是为什么使用控制器处理程序可以完成如此简单的任务的原因。
然而,对于更大、更复杂的逻辑,代码分离和重用会很困难。 这是供应商进来的时候。您可以使用 @Injectable 装饰器在类之上声明/创建提供者。 然后,使用提供程序,您可以执行依赖注入、日志记录和其他任务。
4.模块
Nestjs 模块不是全局的; 相反,它们有深度。
但是,它也可以与任何其他模块共享。 尽管它像 Angular 一样提供全局模块,但最好将服务/控制器保留在 Nestjs 中最常用的模块中。
NestCLI 大部分时间用于生成模块,并且在该模块的上下文中生成的提供程序/控制器由 CLI 自动添加。 这些被称为功能模块。
5.异常过滤器
异常过滤器是控制器抛出异常时调用的错误处理程序。 它会自动管理问题并提供适当的、用户友好的错误消息。
@nestjs/common 包提供了很多 HttpException 继承的异常,包括 NotFoundException、BadRequestException、NotAcceptableException、UnauthorizedException 等等。 您甚至可以设计自己的 ExceptionFilter。
6.中间件
在路由处理程序之前调用的函数称为中间件。 中间件函数可以访问请求和响应对象,以及应用程序请求-响应周期中的 next() 中间件函数。
一个名为 next 的变量通常用于标识下一个中间件函数。 自定义 Nest 中间件可以使用 @Injectable() 装饰器在方法或类中实现。
7. 警卫
守卫只负责一件事。 他们有责任根据特定情况(特别是用户定义的逻辑)评估控制器是否会处理请求。
它有助于身份验证/授权,是 Nestjs 中推荐的方法。
虽然身份验证/权限等可以使用中间件完成,但它不能在 express 或其他 HTTP 服务器中完成,因为它们没有相关的强上下文并且没有理由知道将使用哪种方法来处理请求。
优势
- 该框架严重依赖注释,这些注释用于生成从端点到 Swagger 文档的任何内容。 端点基本整洁,注释通常使开发更容易。
- 由于 Nest.js 是基于模块的框架,因此在许多项目中外部化通用模块和重用代码很简单。
- Nest.js 的文件夹结构受到 Angular 的显着影响。 在设计 Nest 服务时,这可以最大限度地减少停机时间。
- 组件有自己的目录,根目录包含应用程序模块和主文件。 由于结构的简单性,可以将更多的注意力放在端点及其客户的设计上,而不是应用程序的结构上。
- Nest 和 Angular 一样,提供了一个不错的命令行工具 Nestjs/cli,它可以通过 Node Package Manager 获得。
缺点
- Nest 在 TypeScript 使用和 Angular 集成方面具有优势,但它缺乏大公司的资金支持。
- 缺乏文档对 Nest 用户构成了最大的威胁。 尽管该框架与其他框架具有出色的交互性,但文档很少,并且没有解决任何潜在的困难。
- Nest 在 TypeScript 使用和 Angular 方面具有优势。
结论
NestJS 为开发人员提供了巨大的帮助。 要开始开发,您需要做的就是 创建一个新的应用程序 你可以走了。 该框架立即提供了显着的提升,同时还通过建立合适的应用程序架构帮助您进入其他阶段。
它利用尖端的方法和技术来生产易于管理和持久的应用程序。 它可用于连接 GraphQL、WebSockets 和构建微服务。
发表评论