NestJS简介【+6学习资源】
已发表: 2023-01-06NestJS 是一个渐进式 Node.js 框架,用于构建可扩展、高效且可靠的服务器端应用程序。
NestJS 旨在消除杂乱无章的代码库。 它的模块化结构可以很容易地将代码组织到不同的模块中。
NestJS 建立在 Typescript 之上,并在底层使用 ExpressJS。 NestJS 深受想要利用 TypeScript 类型检查功能的开发人员的喜爱。 NestJS 结合了函数式反应式编程 (FRP)、面向对象编程 (OOP) 和函数式编程 (FP) 的不同方面。
为什么选择 NestJS?
NestJS 对初学者很友好,因为它具有良好的结构和易于使用的命令行界面 (CLI) 工具。 因此,开发人员可以在使用此 Node.js 框架时使用单个命令构建新功能。
NestJS 提供模块、服务、控制器和测试堆来帮助您入门。 您还可以利用许多可用的样板和模板来简化您的开发之旅。
对于那些熟悉 JavaScript 和 Angular 中的循环、语法和条件的人来说,NestJS 的学习曲线很容易。
NestJS 的特点
建立在打字稿上
NestJS 建立在 Typescript 之上,Typescript 是 JavaScript 的上标。 Typescript 提供了更好的开发体验,因为您不必在每次更改代码时都手动检查错误。 Typescript 基本上提供了 JavaScript 的所有功能,但还附带了一些附加功能。
依赖注入容器
依赖注入将类使用的对象的初始化与类本身分开。 在这种情况下,该类称为“客户端”,而类依赖项称为“服务”。 NestJS 中的这种内置 DI 使应用程序更加高效和模块化。
强大的命令行界面 (CLI)
您可以使用 NestCLI 初始化、开发和维护所有 NestJS 应用程序。 使用 Nest CLI 可以做很多事情,例如;
- 脚手架项目
- 以开发模式服务于项目
- 构建并捆绑用于生产分发的应用程序
模块化
每个 NestJS 应用程序都至少有一个模块。 “根”模块是最基本的。 在典型的 NestJS 应用程序中,应用程序的每个逻辑部分都将位于相同的域边界(模块)中。 这样的设置使得组织组件变得容易,其中应用程序将具有多个模块,这些模块具有一组密切相关的功能。
单元测试
自动化测试有很多好处。 但是,设置此类测试的过程可能涉及更多。 NestJS 具有多种功能来帮助团队构建和自动化测试。 NestJS 的好处是它可以与各种测试工具一起使用。 Nest 依赖注入系统在测试期间可用,可以轻松模拟组件。
数据库竞争
使用 NestJS 时,您可以根据自己的需要和偏好轻松地与任何 SQL 或 NoSQL 数据库集成。 将 NestJS 连接到数据库非常简单,因为您只需要加载适当的 Node.js 驱动程序。
支持各种库
NestJS兼容多种工具,加速应用开发。 该框架无需额外配置即可支持日志记录、验证、缓存、WebSockets、TypeORM、Mongoose 和 GraphQL。
NestJS 的架构和工作流程
NestJS 有一个由控制器、提供者和模块组成的 3 层架构。 因此,开发人员可以创建不重叠的干净代码。
控制器
NestJS 中的控制器充当客户端请求和响应之间的桥梁。 每当发出 HTTP 请求时,路由机制总是将请求定向到适当的控制器。 该框架使用装饰器和类来创建控制器。 然后将每个类方法映射到路由以接收特定请求。
供应商
提供者可以被描述为 NestJS 的基础。 提供程序作为依赖项注入并在各种对象之间创建关系。 一旦添加了 @Injectable() 装饰器,NestJS 中的类(例如帮助程序、服务或存储库)就可以被视为提供者。 此类提供者也可以通过构造函数注入到类中,NestJS 将解决依赖关系。
模块
NestJS 中的模块汇集了一组密切相关的功能。 每个 NestJS 应用程序都有一个用作入口点的根模块。 如果您想要有条理且易于阅读的代码,强烈建议使用多个模块。 Nest 的“@Module()”装饰器定义了一个模块,还提供了与该模块一起使用的依赖项、控制器和提供程序等信息。
NestJS 入门
确保安装了 Node.js 和 npm。 您需要一个运行时环境,而 Node.js 非常适合此设置。 您需要版本 >= 12,v13 除外。 您可以通过这些命令检查您是否安装了 Node.js 和 npm;
node -v
npm -v
如果两者都安装了,您将获得接近于此的输出
如果您没有它们,请通过官方页面安装它们。 幸运的是,Node.js 和 npm 是一起安装的。
- 安装 Nest CLI。 使用以下命令设置 CLI 和项目;
npm i -g @nestjs/cli
nest new project-name
出于演示目的,我们选择项目名称为 mynestapp。 NestJS 让你有机会使用 Typescript 或 Vanilla JavaScript。 选择适合您的内容,然后按回车键。 应用搭建完成后,文件结构将设置好,“src”文件夹将包含几个核心文件,如屏幕截图所示
- 运行应用程序/你的第一个 hello world
安装完成后,运行这些命令来运行开发服务器
cd mynestapp
npm run start
在你的浏览器中输入 http://localhost:3000/,你在 NestJs 上的第一个“Hello World”应该会显示出来
NestJS:优点
- 简单易学。 掌握 NestJS 很容易,特别是如果您来自 Angular 或对 JavaScript 有一般了解。 详细的文档还可以让您轻松掌握使用这个强大的框架。
- 灵活。 你可以使用 NestJS 构建很多东西。 您可以使用此 Node.js 框架创建 MVC 应用程序、GraphQL 应用程序、RESTful API 和 Web 套接字。
- 自带数以千计的模块。 社区支持的模块使开发人员在创建服务器端应用程序时可以轻松构建不同的功能。
- 快速发展和良好的架构。 使用 NestJS 时,您不必从头开始创建所有内容。 但是,同一框架具有坚固的体系结构,可以轻松理解您的代码。
NestJS:缺点
- 不适合有 TypeScript 和 Angular 背景的人。 NestJS 从 Angular 架构中借鉴了很多,没有这些知识的人可能需要时间来理解语法和结构。
- 某些地区缺乏。 NestJS 还很年轻,可能无法与一些基于 Python 和 GO 的成熟框架竞争。
使用 NestJS 的公司
#1。 阿迪达斯
阿迪达斯是一家鞋类制造商和设计师,也是使用 NestJS 的公司之一。 NestJS 的惊人功能一定吸引了这家鞋业巨头在其后端使用它。
#2。 凯捷
Capgemini 是一家法国跨国公司,提供咨询、技术、外包和专业服务。 该公司在其技术堆栈中使用 NestJS。
#3。 罗氏
罗氏是一家跨国医疗保健公司,有两个部门; 制药和诊断。 罗氏使用 NestJS 作为其主要网站上的技术堆栈之一。
学习资源
#1。 NestJS 从零到英雄
NestJS Zero to Hero 教开发人员如何使用 Typescript 和 Node.js 创建和部署企业后端应用程序。 该课程教授如何创建 API、授权和身份验证、单元测试 Nest 应用程序以及用于数据库交互的 TypeORM 等。
#2。 NestJS:完整的开发者指南
本课程教授开发人员如何使用 Nest、TypeScript 和 TypeORM 创建后端 API。 这份完整的指南包含设置 NestJS 应用程序编码、测试和部署所需的一切。 您还将了解 NestJS Web 框架的幕后知识。
#3。 掌握 NestJS
NestJS 大师教授如何使用 TypeScript 开发企业级 Node.js 应用程序。 该课程教授验证和数据序列化、JWT 令牌的工作原理、如何使用 NestCLI 和现代数据库抽象等等。
#4。 NestJs 实践(使用 MongoDB)
NestJS in Practice 从模块、控制器、GuardsServices、管道和中间件中教授您需要了解的有关 NestJS 的一切知识。 该课程采用基于项目的方法,您可以在 GitHub 上编码和托管您的代码,每个部分都有可下载的 zip 文件。
#5。 Nest.js:渐进式 Node.js 框架
这本书向开发人员介绍了 NestJS 以及如何利用 JavaScript 和 TypeScript。 本书采用操作方法格式设计,以确保您可以立即设置和运行您的 NestJS 应用程序。
预习 | 产品 | 评分 | 价格 | |
---|---|---|---|---|
Nest.js:渐进式 Node.js 框架 | 24.99 美元 | 在亚马逊上购买 |
#6。 实用的 Nest.js:开发干净的 MVC web 应用程序
Practical Nest.js 这本书使用基于项目的方法来创建一个利用各种 NestJS 功能的在线商店应用程序。 这本书包括简短的讨论、技巧和创建 NestJS 应用程序时有用的短语。
预习 | 产品 | 评分 | 价格 | |
---|---|---|---|---|
实用的 Nest.js:开发干净的 MVC web 应用程序 | 16.99 美元 | 在亚马逊上购买 |
结论
除了是一个强大的 Node.js 框架之外,NestJS 还是当今服务器端应用程序最流行的 Typescript 框架之一。 它提供编码最佳实践和标准开发架构的事实使其吸引了许多希望在构建应用程序时专注于构建业务逻辑的工程师。