框架介绍
学习目标
- 了解 NestJS 的基本概念和发展历程
- 掌握 NestJS 的核心特点和优势
- 理解 NestJS 的架构设计理念
- 了解 NestJS 与其他后端框架的对比
- 能够搭建第一个 NestJS 项目
核心知识点
1. NestJS 简介
Nest (NestJS) 是一个用于构建高效、可扩展的 Node.js 服务器端应用的框架。它使用渐进式 JavaScript,内置并完全支持 TypeScript(但仍允许开发者使用纯 JavaScript 编码),并结合了面向对象编程 (OOP)、函数式编程 (FP) 和函数式响应式编程 (FRP) 的元素。
NestJS 由 Kamil Myśliwiec 于 2017 年创建,旨在解决 Node.js 后端开发中的架构问题。在 NestJS 出现之前,虽然有很多优秀的 Node.js 库和工具,但没有一个框架能够有效地解决架构问题,导致代码组织混乱、难以维护。
2. NestJS 的核心特点
2.1 模块化架构
NestJS 采用模块化架构,将应用程序分解为多个相互独立的模块,每个模块负责特定的功能。这种模块化设计使得代码结构清晰,易于维护和测试。
2.2 依赖注入
NestJS 内置了强大的依赖注入系统,使得组件之间的耦合度降低,提高了代码的可测试性和可维护性。
2.3 装饰器支持
NestJS 充分利用了 TypeScript 的装饰器特性,使得代码更加简洁、可读性更高。装饰器用于标记控制器、提供者、模块等组件。
2.4 中间件、过滤器、管道和守卫
NestJS 提供了丰富的扩展点,包括中间件、异常过滤器、管道和守卫,使得开发者可以在请求处理的不同阶段进行干预和处理。
2.5 支持多种 HTTP 服务器
NestJS 默认使用 Express 作为 HTTP 服务器,但也可以配置使用 Fastify,为开发者提供了更多选择。
2.6 微服务支持
NestJS 内置了对微服务的支持,使得开发者可以轻松构建分布式系统。
2.7 强大的 CLI 工具
NestJS 提供了强大的命令行工具 (CLI),用于生成项目、模块、控制器等,大大提高了开发效率。
3. NestJS 的架构设计理念
NestJS 的架构设计理念主要基于以下几点:
3.1 分层架构
NestJS 鼓励采用分层架构,将应用程序分为控制器层、服务层、数据访问层等,每层负责特定的职责,使得代码结构清晰,易于维护。
3.2 关注点分离
NestJS 强调关注点分离,每个组件只负责特定的功能,避免了代码的混乱和重复。
3.3 约定优于配置
NestJS 采用约定优于配置的原则,提供了合理的默认配置,同时也允许开发者根据需要进行自定义配置。
3.4 可测试性
NestJS 的设计考虑了可测试性,依赖注入系统使得组件可以轻松被模拟和测试。
4. NestJS 与其他框架的对比
4.1 与 Express 对比
- 架构:Express 是一个轻量级框架,没有强制的架构约束;NestJS 提供了完整的架构体系。
- TypeScript 支持:Express 对 TypeScript 的支持是通过类型定义文件实现的;NestJS 内置并完全支持 TypeScript。
- 模块化:Express 没有内置的模块化系统;NestJS 提供了强大的模块化系统。
- 依赖注入:Express 没有内置的依赖注入系统;NestJS 内置了强大的依赖注入系统。
- 扩展性:Express 依赖中间件进行扩展;NestJS 提供了更多的扩展点,如过滤器、管道、守卫等。
4.2 与 Koa 对比
- 架构:Koa 是一个极简框架,专注于中间件;NestJS 提供了完整的架构体系。
- TypeScript 支持:Koa 对 TypeScript 的支持是通过类型定义文件实现的;NestJS 内置并完全支持 TypeScript。
- 功能:Koa 提供了基本的 HTTP 服务器功能;NestJS 提供了更多的功能,如模块化、依赖注入、微服务支持等。
4.3 与 AdonisJS 对比
- 生态系统:AdonisJS 提供了完整的 MVC 框架;NestJS 提供了更加灵活的模块化架构。
- TypeScript 支持:AdonisJS 支持 TypeScript;NestJS 内置并完全支持 TypeScript,提供了更好的类型安全。
- 微服务支持:NestJS 内置了对微服务的支持;AdonisJS 主要专注于 HTTP 应用。
实践案例
搭建第一个 NestJS 项目
步骤 1:安装 Node.js
首先,确保你的系统已经安装了 Node.js(版本 16.0 或更高)。你可以在 Node.js 官网 下载并安装。
安装完成后,可以通过以下命令检查 Node.js 和 npm 的版本:
node -v
npm -v步骤 2:安装 Nest CLI
Nest CLI 是一个命令行工具,用于生成 NestJS 项目和各种组件。使用 npm 全局安装 Nest CLI:
npm install -g @nestjs/cli安装完成后,可以通过以下命令检查 Nest CLI 的版本:
nest --version步骤 3:创建新项目
使用 Nest CLI 创建一个新的 NestJS 项目:
nest new first-nestjs-project执行命令后,CLI 会提示你选择包管理器(npm、yarn 或 pnpm),选择你喜欢的包管理器即可。
步骤 4:进入项目目录
项目创建完成后,进入项目目录:
cd first-nestjs-project步骤 5:了解项目结构
NestJS 项目的默认结构如下:
first-nestjs-project/
├── src/
│ ├── app.controller.ts
│ ├── app.controller.spec.ts
│ ├── app.module.ts
│ ├── app.service.ts
│ └── main.ts
├── test/
│ ├── app.e2e-spec.ts
│ └── jest-e2e.json
├── .eslintrc.js
├── .gitignore
├── .prettierrc
├── nest-cli.json
├── package.json
├── README.md
├── tsconfig.build.json
└── tsconfig.json主要文件的作用:
src/main.ts:应用程序的入口文件,负责启动 NestJS 应用。src/app.module.ts:应用程序的根模块,负责组织和配置其他组件。src/app.controller.ts:示例控制器,处理 HTTP 请求。src/app.service.ts:示例服务,包含业务逻辑。src/app.controller.spec.ts:控制器的测试文件。
步骤 6:启动开发服务器
使用以下命令启动开发服务器:
npm run start:dev开发服务器启动后,你可以在浏览器中访问 http://localhost:3000,看到默认的欢迎消息。
步骤 7:修改默认控制器
打开 src/app.controller.ts 文件,修改默认的 getHello 方法:
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';
@Controller()
export class AppController {
constructor(private readonly appService: AppService) {}
@Get()
getHello(): string {
return this.appService.getHello();
}
@Get('welcome')
getWelcome(): string {
return 'Welcome to NestJS! This is your first NestJS project.';
}
}保存文件后,开发服务器会自动重新加载。现在你可以在浏览器中访问 http://localhost:3000/welcome,看到新的欢迎消息。
互动思考问题
- NestJS 的核心特点有哪些?与 Express 相比有什么优势?
- NestJS 的架构设计理念是什么?为什么这种设计理念有利于构建可维护的应用?
- 你认为在什么场景下选择 NestJS 会比其他框架更合适?
- 搭建第一个 NestJS 项目时,你遇到了什么问题?是如何解决的?
- 你对 NestJS 的学习有什么期望?希望通过学习 NestJS 实现什么目标?
小结
本课程介绍了 NestJS 框架的基本概念、发展历程、核心特点和优势,以及其架构设计理念。我们还对比了 NestJS 与其他后端框架的不同之处,并通过实践案例演示了如何搭建第一个 NestJS 项目。
NestJS 作为一个现代化的后端框架,提供了完整的架构体系和丰富的功能,使得开发者可以更加高效地构建可维护、可扩展的服务器端应用。通过本课程的学习,你已经对 NestJS 有了初步的了解,为后续的学习打下了基础。
在下一课程中,我们将学习如何安装和初始化 NestJS 项目,以及如何理解和组织 NestJS 项目的结构。