跳到正文

NestJS

中级通用

NestJS 是运行在 Node.js 上、以 TypeScript 为主要开发语言的后端框架。它通过模块、控制器和依赖注入组织接口与业务逻辑,让我们给后台或 App 写服务时,更容易拆分职责、测试代码和持续扩展。

你可能会说:「帮我把后台接口按业务拆开,方便以后加功能,也方便单独测试。」

读之前建议先了解

动手看看

注入实例客户端订单控制器依赖就绪订单服务模块内提供数据库
1

启动时,订单模块声明控制器和服务,NestJS 容器把服务实例注入控制器,不用控制器自己创建。

要点

  1. 1

    用模块划分业务边界

    你可以把会员、订单、通知分别放进不同模块。模块声明自己提供哪些能力、需要哪些其他模块的能力,这样 AI 加订单功能时,就有明确的代码归属,而不是往一个文件里堆。

  2. 2

    让控制器与服务分工

    控制器负责把请求接到对应方法,服务负责处理业务。例如创建预约时,控制器接收请求,预约服务检查时间冲突并调用数据访问代码。这样同一套业务逻辑也能被定时任务复用。

  3. 3

    通过依赖注入连接能力

    预约服务需要通知能力时,我们先注册通知服务,再让 NestJS 把它传进来,这叫依赖注入。因为创建和连接对象的工作交给框架,测试时就能把真实通知服务换成不会发消息的替身。

容易混淆的地方

NestJS 和 Next.js 名字相近,但前者主要组织后端服务,后者主要构建 React Web 应用,也能提供服务端接口。NestJS 默认使用 Express 处理 HTTP,也可选择 Fastify;它在这些基础之上提供模块和依赖注入,并不是另一套运行时。

什么时候用

适合用

  • 做包含会员、订单和权限的管理后台,需要多人或多个 Agent 按业务分工开发。
  • 给网站和 App 提供共用接口,希望业务逻辑不跟某个客户端页面绑定。
  • 维护持续扩展的 TypeScript 后端,需要替换外部服务并单独测试业务逻辑。

不适合用

  • 只做展示内容的静态官网,没有自建后端需求,用静态站点方案就够了。
  • 只写一次性的数据整理脚本,直接用 Node.js 脚本比搭建框架更省事。
  • 只验证一个简单接口,暂时没有模块化需求,可以先用 Express 做小服务。

练一练

你在做预约平台,网页接口和定时任务都要执行预约取消逻辑,测试时还不能真的发短信。怎样使用 NestJS 更合适?

让 AI 帮你做

用 NestJS 和 TypeScript 为预约平台实现创建、取消预约接口。按预约和通知拆分模块,控制器处理请求,服务承载业务,通过依赖注入接入通知能力。补充参数校验和业务测试,测试中替换短信发送服务,并说明各文件职责。

接下来学什么