首页 / NestJS 入门教程 / NestJS 是什么

NestJS 入门教程

NestJS 是什么

本教程共 47 篇 · 第 1 篇 · 更新于 2026-08-09 · 约 8 分钟阅读

NestJSNode.js框架对比TypeScript后端开发企业级架构

本节目标:搞清楚 NestJS 到底是干嘛的,它解决了什么问题,以及你该不该学它。

一句话介绍

NestJS 是一个用 TypeScript 构建的 Node.js 后端框架。

听着挺普通对吧?Node.js 后端框架多了去了,Express、Koa、Fastify……为什么还要再来一个?

因为前面这些框架解决的是”怎么接收请求、怎么返回响应”这种底层问题。但当你项目一大,你就会发现一个灵魂拷问:代码往哪放?

Express 不管这事。它给你一个最小骨架,剩下的架构全靠自己摸索。项目小的时候还行,等路由写到几百个、服务逻辑越来越复杂的时候,整个项目就变成了一个”什么都往 src 里塞”的垃圾场。

NestJS 就是来解决这个问题的。

NestJS 的核心思路

打个比方。Express 就像给你一堆砖头和水泥,你自己盖房子。盖个小平房没问题,但要盖一栋写字楼,你得自己设计图纸、承重结构、水电管线……

NestJS 则直接给了你一套标准化的建筑方案。哪里是承重墙、哪里走电线、哪里接水管,全都帮你规划好了。你只需要往里面填业务逻辑就行。

具体来说,NestJS 借鉴了 Angular 的架构设计,提供了一套开箱即用的组织方式:

  • 模块(Module):把相关功能打包在一起,像文件夹一样管理代码
  • 控制器(Controller):专门处理 HTTP 请求,决定”这个 URL 该调谁”
  • 提供者(Provider):封装业务逻辑,干活的主力
  • 依赖注入(DI):自动帮你管理对象之间的依赖关系
Note

如果你用过 Angular,会发现 NestJS 的写法非常眼熟。装饰器、模块、依赖注入……几乎是同一套思路搬到了后端。没用过也不用慌,后面会一个一个讲。

装饰器:NestJS 的语法糖

NestJS 大量使用装饰器(Decorator)来标注代码。你可能在 TypeScript 或 Angular 里见过这种 @ 开头的语法:

import { Controller, Get } from '@nestjs/common';

@Controller('users')
export class UsersController {
  @Get()
  findAll(): string {
    return '返回所有用户';
  }
}

这段代码做了一件事:定义了一个处理 /users 路由的控制器,当收到 GET 请求时,调用 findAll 方法。

不用装饰器也能写后端,但装饰器的好处是——代码即文档。你一看 @Controller('users') 就知道这是个控制器,一看 @Get() 就知道它处理 GET 请求。不用翻来翻去找路由配置。

常用装饰器一览:

装饰器作用
@Module()定义一个模块
@Controller()定义一个控制器
@Injectable()标记一个类可以被依赖注入管理
@Get() @Post()定义路由的 HTTP 方法
@Body() @Param()提取请求中的参数

这些装饰器后面都会详细讲,现在先混个脸熟。

NestJS 和 Express 的区别

很多人会问:我 Express 用得好好的,为什么要换 NestJS?

先看个对比:

对比项ExpressNestJS
架构没有固定架构,自由组织内置模块化架构
TypeScript需要自己配置原生支持
依赖注入没有内置 IoC 容器
学习曲线低,上手快相对高一些
适合场景小项目、API 网关中大型项目、微服务

简单说:

  • Express 是”自由市场”,灵活但没有约束。项目小的时候很爽,大了容易乱。
  • NestJS 是”规划好的小区”,有规矩但方便管理。一开始觉得约束多,项目一大就真香了。
Tip

NestJS 底层默认用的就是 Express。你也可以切换成 Fastify 来获得更好的性能。所以 NestJS 不是要替代 Express,而是在 Express 之上加了一层架构。

底层平台:Express 还是 Fastify

NestJS 有一个设计哲学叫”平台无关”。意思是 NestJS 本身不绑定某个 HTTP 框架,它通过适配器来对接不同的底层平台。

目前支持两个:

// 方式一:使用 Express(默认)
const app = await NestFactory.create(AppModule);

// 方式二:使用 Fastify(性能更好)
import { NestFactory } from '@nestjs/core';
import {
  FastifyAdapter,
  NestFastifyApplication,
} from '@nestjs/platform-fastify';

const app = await NestFactory.create<NestFastifyApplication>(
  AppModule,
  new FastifyAdapter(),
);

大部分情况下用默认的 Express 就行。等你需要极致性能的时候再考虑切 Fastify。

什么场景适合用 NestJS

说了这么多,到底什么时候该上 NestJS?

适合的场景:

  • 团队多人协作,需要统一的代码组织规范
  • 项目会持续增长,需要可维护的架构
  • 要搞微服务架构
  • 团队熟悉 TypeScript 或 Angular

不太适合的场景:

  • 写个简单的 API 接口,几十行代码搞定
  • 团队完全不会 TypeScript,短期也没打算学
  • 对性能有极致要求(NestJS 的抽象层会带来一点点开销)
Note

如果你的项目现在很小但未来可能变大,也建议直接用 NestJS。因为从 Express 迁移到 NestJS 的成本,比一开始就用 NestJS 高得多。

NestJS 的技术生态

NestJS 不只是一个框架,它背后有一整套官方维护的包来覆盖常见需求:

NestJS 生态
├── 核心
│   ├── @nestjs/core          核心引擎
│   ├── @nestjs/common        公共装饰器和工具
│   └── @nestjs/platform-*    平台适配器
├── 数据库
│   ├── @nestjs/typeorm       TypeORM 集成
│   ├── @nestjs/mongoose      MongoDB 集成
│   └── @nestjs/prisma        Prisma 集成
├── 认证和安全
│   ├── @nestjs/passport      Passport 认证集成
│   └── @nestjs/jwt           JWT 支持
├── 微服务
│   └── @nestjs/microservices 微服务通信
├── 工具
│   ├── @nestjs/cli           命令行脚手架
│   └── @nestjs/testing       测试工具
└── 实时通信
    └── @nestjs/websockets    WebSocket 支持

这些包都是官方维护的,质量有保障。不像 Express 生态里需要自己在一堆第三方包里挑。

版本说明

本教程基于 NestJS 11.1.28 编写,要求 Node.js 版本 >= 20,TypeScript 5.x。

NestJS 的版本迭代比较稳定,10.x 和 11.x 的核心 API 差别不大。如果你用的是 10.x,大部分内容也适用。

小结

NestJS 做的事情就是:给 Node.js 后端开发提供一套标准化的架构方案。

它不是要取代 Express,而是在 Express 之上帮你把代码组织好。模块、控制器、服务、依赖注入……这些概念听起来多,但一个一个学其实很快。

接下来的教程会从安装环境开始,带你一步步搭建一个 NestJS 项目。

上一篇
已经是第一篇啦
下一篇
安装与环境搭建