通过实现一个TODO需求来了解NestJS,需要实现的功能包括:
- 用户注册、登录
- 备忘录创建、修改、查询、删除
创建项目
❗注意:Node版本需≥20
全局安装 Nest CLI 脚手架,并初始化项目,项目名称为 DoraemonNotebook
(哆啦A梦记事本)
bash
$ npm i -g @nestjs/cli
$ nest new DoraemonNotebook
了解项目结构及基础概念
创建完成后项目的目录结构如图:

其中核心文件为 src 目录下的几个文件:
文件 | 说明 |
---|---|
app.controller.spec.ts | 控制器的单元测试 |
app.controller.ts | 一个具有单个路由的基本控制器 |
app.module.ts | 应用程序的根模块 |
app.service.ts | 一个具有单个方法的基本服务 |
main.ts | 应用程序的入口文件,它使用核心函数 NestFactory 来创建 Nest 应用程序实例 |
根据这几个核心文件及数据流向我们来了解一下NestJS中的几个核心概念,在入口文件中我们首先会接触到根模块 AppModule
。
模块

Nest项目中至少需要一个根模块,即目前的 app.module.ts
文件,它是 Nest 构建应用程序的起点。我们在组织程序功能架构时推荐使用模块作为组织组件的方式,将一组密切相关的功能作为一个模块,方便管理。
在模块中我们可以看到引入了 AppController
和 AppService
,接下来我们先了解控制器(AppController
)的概念。
控制器

控制器类似于前端的路由,它告诉程序请求将用哪个控制器处理,一个控制器可以具有多个路由,每个路由执行不同的操作。 具体的操作实现也就是业务逻辑我们一般放在提供者(AppService
)中实现。
提供者
提供者(Provider)负责封装特定功能(如业务逻辑、数据访问、工具函数等),并可通过依赖注入(@Injectable()
)的方式在控制器或其他服务中使用。
默认情况下提供者是单例模式,全局共享实例状态,也可以通过声明作用域将生命周期改为请求作用域(
@Injectable({scope: Scope.REQUEST})
)、临时作用域(@Injectable({scope: Scope.TRANSIENT})
)。
其他
本章只是简单了解NestJS的目录及架构,其实还有很多概念没介绍到,比如装饰器、依赖注入、中间件、异常过滤器、拦截器等,后续的文章中我们将通过在完成实际TODO需求中一一使用并详细讲解。
项目启动
项目开发过程中我们可以通过以下命令启动程序:
bash
$ npm run start:dev
此命令将监视您的文件,自动重新编译并重新加载服务器。通过浏览器访问 http://localhost:3000
,我们可以看到返回的 Hello World!
消息。