全书目录

第七篇:NestJS 完全指南 —— 国际机场总调度宇宙

第二十章:你最容易写错的 10 件事

2 分钟 654 字 第 200 / 962 个阅读单元
#1. 把 Controller 写成全能上帝类

表现:

  • 直接查数据库
  • 直接写鉴权
  • 直接处理异常
  • 直接做响应包装

后果:柜台兼调度塔台兼仓库管理员,迟早炸。

#2. 模块划分按“技术层”而不是按“业务分区”

例如:

text
controllers/
services/
repositories/
dto/

这种平铺结构在项目一大就会散掉。
更稳的是按业务模块拆:

text
flights/
passengers/
auth/
payments/
#3. DTO 不做校验,类型只停留在编译期

TypeScript 类型不会自动保护运行时请求。
没有 ValidationPipe,外部脏数据照样能进。

#4. 把 Guard、Pipe、Interceptor、Filter 职责混掉

别这样:

  • Guard 里做 DTO 清洗
  • Pipe 里做授权
  • Interceptor 里做业务审批
  • Filter 里吞掉所有错误假装成功
#5. 一上来就全局 @Global() 到处开

全局模块能少量用,但不要把整个机场都做成“谁都能随便拿”。

#6. 数据层两套心智混用

今天 TypeORM repository,明天 Prisma client,后天再直接裸 SQL。
系统会越来越难维护。

#7. 业务异常都用 Error

应该优先抛语义明确的 HTTP 异常,或你自己的业务异常。

#8. 配置写死

数据库、JWT、第三方服务地址都必须走配置系统。

#9. 只写 happy path,不写测试

这意味着机场只演练“晴天准点起飞”,完全不演练延误、故障和安检失败。

#10. 迷信 decorator,忽略边界设计

Decorator 只是挂点。
真正值钱的是:

  • 谁依赖谁
  • 谁对外暴露什么
  • 哪一层负责什么