Nest.js 是一个构建高效、可伸缩的企业级服务器端应用程序的渐进式 Node.js 框架。
它支持 TypeScript 和 JavaScript(ES6、ES7、ES8),并结合了面向对象编程(OOP)、函数式编程(FP)和函数式响应编程(FRP)的理念。
Nest.js 在设计上从 Angular 和 Java 的 Spring 框架中汲取灵感,引入了依赖注入和面向切面编程等概念。因此,它也被称为 Node.js 版的 Spring 框架。
Nest 框架的底层 HTTP 平台默认基于 Express 实现,但旨在成为一个与平台无关的框架。
通过创建适配器,Nest 可以使用任何 Node HTTP 框架。目前,它支持开箱即用的两个 HTTP 平台:Express 和 Fastify。
由于 Nest.js 在行业内具有很高的关注度,因此学习 Nest.js 对于开发者来说是非常有价值的。
学习基础
在学习 Nest.js 之前,具备以下基础知识更有利于学习:
- JavaScript/TypeScript 基础:了解基本的语法、数据类型、函数、类、类型等概念。
- Node.js 基础知识:熟悉事件循环、异步编程、模块系统等核心概念,以及 File System、HTTP 等基础库的使用。
- Express.js 框架:由于 Nest.js 底层默认使用 Express.js,因此了解 Express.js 的中间件、路由、请求处理等机制将有所帮助。
- REST API 和 HTTP 协议:了解 RESTful 架构风格和 HTTP 协议的基本概念,如请求方法、状态码、请求和响应的结构等。
- 软件设计原则:理解面向对象编程的基本原则(如封装、继承、多态)以及 SOLID 设计原则,这些原则在使用 Nest.js 构建应用程序时非常重要。
- 数据库知识:了解 SQL 和 NoSQL 数据库的基础知识,以及如何在 Node.js 中与这些数据库交互,将有助于你在使用 Nest.js 时进行数据存储和检索。
环境搭建和运行
- 安装 Node.js:确保 Node.js 版本至少为 10.13.0,可以从 Node.js 官网下载并安装合适的版本。
- 安装 Nest CLI:
bash
npm i -g @nestjs/cli
- 创建项目:使用 Nest CLI 创建一个新的 NestJS 项目。替换 project-name 为你想要的项目名称:
bash
nest new project-name
执行这个命令后,选择包管理器(npm、yarn 或 pnpm)即可
- 进入项目目录:创建项目后,进入新创建的项目目录。
bash
cd project-name
- 运行项目:(应用将在文件更改时自动重启)
bash
npm run start:dev
Nest.js 应用应该会在默认的 3000
端口上启动。
可以通过访问 http://localhost:3000
在浏览器中查看它。
如果需要修改端口或者其他配置,在src/main.ts
文件中修改。
Nest 项目目录结构
初始化项目后的目录文件:
- node_modules/:这个目录包含了项目的所有依赖库,这些是通过 npm 或 yarn 等包管理工具安装的。
- src/:这是包含项目源代码的目录。在 NestJS 中,它通常包含控制器、服务、模块等。
- app.controller.spec.ts:这是控制器的单元测试文件,用于测试 app.controller.ts 的功能。
- app.controller.ts:这是一个控制器文件,负责处理传入的请求并返回响应。
- app.module.ts:这是应用程序的根模块文件,它组织和提供了应用程序的不同部分。
- app.service.ts:这是服务文件,通常包含业务逻辑。
- main.ts:这是应用程序的入口文件,用于启动应用程序。
- test/:这个目录包含端到端(e2e)测试文件。
- app.e2e-spec.ts:端到端测试文件,用于模拟真实的请求流程,测试整个应用程序。
- jest-e2e.json:端到端测试的 Jest 配置文件。
- .eslintrc.js:ESLint 的配置文件,用于代码质量和风格检查。
- .gitignore:Git 配置文件,用于指定不需要添加到版本控制中的文件或目录。
- .prettierrc:Prettier 的配置文件,用于代码格式化。
- nest-cli.json:Nest 命令行工具的配置文件,用于自定义 NestJS 项目。
- package-lock.json:记录当前状态下实际安装的依赖库的精确版本,确保其他开发人员或部署环境安装相同版本的依赖。
- package.json:记录项目的元数据和依赖关系的文件,可以通过它安装、更新和移除依赖库,还包含了脚本和项目配置。
- README.md:Markdown 文件,通常包含项目说明、安装步骤和其他重要信息。
- tsconfig.build.json:TypeScript 编译器的配置文件,用于生产环境的构建。
- tsconfig.json:TypeScript 编译器的配置文件,用于开发环境。
Nest 最佳目录架构
lua
src/
|-- app.controller.ts // 应用程序的控制器
|-- app.module.ts // 应用程序的根模块
|-- app.service.ts // 应用程序的服务
|-- main.ts // 应用程序的入口文件
|-- modules/ // 功能模块目录
|-- users/
|-- users.module.ts // 用户模块
|-- users.service.ts // 用户服务
|-- users.controller.ts // 用户控制器
|-- dto/ // 数据传输对象
|-- create-user.dto.ts
|-- update-user.dto.ts
|-- entities/ // 实体(数据库模型)
|-- user.entity.ts
|-- common/ // 公共模块目录
|-- filters/ // 异常过滤器
|-- pipes/ // 管道
|-- guards/ // 守卫
|-- decorators/ // 自定义装饰器
|-- interfaces/ // 接口定义
|-- constants/ // 常量定义
|-- config/ // 配置文件目录 |-- configuration.ts // 配置服务 |-- assets/ // 静态资源目录 |-- test/ // 测试目录 |-- app.e2e-spec.ts // 端到端测试 |-- jest.config.js // Jest 配置文件
按照功能模块化划分的,职责清晰,分工明确。
在 common
目录中,可以放置应用程序中多次使用的代码,如异常过滤器、管道、守卫等。
而 config 目录通常用于存放配置相关的代码。