框架介绍

学习目标

  • 了解 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,看到新的欢迎消息。

互动思考问题

  1. NestJS 的核心特点有哪些?与 Express 相比有什么优势?
  2. NestJS 的架构设计理念是什么?为什么这种设计理念有利于构建可维护的应用?
  3. 你认为在什么场景下选择 NestJS 会比其他框架更合适?
  4. 搭建第一个 NestJS 项目时,你遇到了什么问题?是如何解决的?
  5. 你对 NestJS 的学习有什么期望?希望通过学习 NestJS 实现什么目标?

小结

本课程介绍了 NestJS 框架的基本概念、发展历程、核心特点和优势,以及其架构设计理念。我们还对比了 NestJS 与其他后端框架的不同之处,并通过实践案例演示了如何搭建第一个 NestJS 项目。

NestJS 作为一个现代化的后端框架,提供了完整的架构体系和丰富的功能,使得开发者可以更加高效地构建可维护、可扩展的服务器端应用。通过本课程的学习,你已经对 NestJS 有了初步的了解,为后续的学习打下了基础。

在下一课程中,我们将学习如何安装和初始化 NestJS 项目,以及如何理解和组织 NestJS 项目的结构。

下一篇 » 安装与项目初始化