楼层: 首页/ 软件技术/ Node.js 全栈实战/ NestJS:企业级的 Node 框架
07

NestJS:企业级的 Node 框架

NestJS 10+ · 像 Spring Boot 的 Node 版

Express 灵活但自由过头——项目一上千行,代码怎么组织全靠自觉,十人团队能写出十种风格。NestJS 就是来"定规矩"的:它强制用 TypeScript,内置依赖注入、装饰器、模块化,整体设计思路几乎照抄 Spring Boot。如果你从 Java 转来,会觉得它亲切得像回家;如果纯 Node 背景,学会它就拿到了"写中大型企业项目"的门票。

五个核心概念:MVC + 依赖注入

概念大白话
Module(模块)把功能打包成一块,比如 UserModule、ArticleModule。一个大项目由很多 Module 拼成。
Controller(控制器)负责"接请求"——哪个 URL 对应哪个函数,只做收发,不写业务。
Service(服务)真正写业务逻辑的地方,被 Controller 调用。
Provider / 依赖注入你在构造函数里声明需要哪个 Service,Nest 自动把实例"递到你手上",不用自己 new。
装饰器 @那些 @Module、@Get 就是贴标签,告诉 Nest"这个类/这个方法是干嘛的"。

一个最小 NestJS 控制器长这样(装饰器风格)

// cats.controller.ts import { Controller, Get, Param, Post, Body } from "@nestjs/common"; import { CatsService } from "./cats.service"; @Controller("cats") // 这个控制器管 /cats 开头的路由 export class CatsController { // 构造函数里声明需要 CatsService,Nest 自动注入实例 constructor(private readonly catsService: CatsService) {} @Get() // GET /cats findAll() { return this.catsService.findAll(); } @Get(":id") // GET /cats/123 findOne(@Param("id") id: string) { return this.catsService.findOne(id); } @Post() // POST /cats,@Body 拿出请求体 create(@Body() body: { name: string }) { return this.catsService.create(body); } }

除了 MVC,Nest 还有四把刀

  • 守卫 Guard:进门查票。比如 @UseGuards(AuthGuard),没登录的请求直接挡在门外,进不了控制器。JWT 认证就靠它。
  • 拦截器 Interceptor:在请求前后加工。比如统一给返回数据包一层 {code, data} 格式,或记录耗时。
  • 管道 Pipe:进门验货。配合 class-validator,自动校验前端传来的数据字段对不对(比如邮箱格式、年龄是不是数字),不对直接 400。
  • 异常过滤器:统一处理报错,把未捕获的异常变成标准 JSON 错误响应,不用每处 try/catch。

选Express 还是 NestJS

小项目 / 练手 / 写个脚本和小接口:用 Express,轻、快、心智负担低。

中大型企业项目、团队协作、要长期维护:上 NestJS。它的"规矩"在小项目里是累赘,在大项目里是救命——依赖注入让单元测试好写,模块化让多人不打架,装饰器让结构一目了然。顺序建议:先 Express 摸透 Web 本质,再 NestJS 学生产级组织方式。

记
本章小结

① NestJS = TypeScript + 模块化 + 依赖注入 + 装饰器,是 Node 圈的"企业级标准答案"。

② 记住分工:Controller 接请求、Service 写业务、Module 打包;守卫管认证、管道管校验。

③ 从 Express 学起,项目大了再升级到 NestJS,别一上来就被装饰器吓退。