2026-05-18 nestjs开发理解:entity定义字段,dto校验逻辑,service写业务,controller管理接口,module用于组装前者内容并导出整个模块
| 节点 | 说明 |
|---|---|
| entity 定义字段 | 定义数据库表结构。Entity 里的每个 @Column() 直接对应数据库的一个列,TypeORM 会根据它自动建表或映射查询结果。 |
| dto 校验逻辑 | 定义接口的"门禁规则"。客户端发来的数据必须经过 DTO 的装饰器校验(@IsString、@IsEnum 等),不合法就直接拒绝,不会进入 Service。 |
| service 写业务 | 写核心业务逻辑的地方。判断编码是否重复、拼接查询条件、记录操作日志等,全部在这里。它不关心数据从哪来(HTTP 还是命令行),只专注于业务规则。 |
| controller 管理接口的 | 对接 HTTP 世界。定义路由(@Post('create'))、提取请求数据(@Body()、@Req())、调用 Service,最后组装统一格式的响应返回给客户端。 |
| module 用于组装前者内容并导出整个模块 | 模块的"装配车间"。把 Entity、Controller、Service 的依赖关系明确声明出来,决定哪些功能对外暴露(exports),哪些只在内部使用。 |
数据流向图
以岗位管理模块为例,一次完整的"创建岗位"请求,数据流经这五层是这样的:

客户端 POST /posts/create
↓
【Module】 ← 启动时就组装好了依赖关系
↓
【Controller】 接收请求
1. 用对应的 DTO 校验请求体
2. 从 req.user 提取操作人信息
3. 调用 Service 的 create 方法
↓
【Service】 执行业务逻辑
1. 检查编码是否重复(查 Entity 对应的表)
2. 通过 Repository 创建 Entity 实例
3. 填入 creatorId/updaterId
4. 保存到数据库
↓
返回数据
↓
【Controller】 包装成统一格式
{ code: 200, message: '创建成功', data, ... }
↓
响应给客户端
一句话总结
Entity 管数据库长什么样,DTO 管输入数据怎么校验,Service 管业务怎么做,Controller 管对外暴露什么接口,Module 管它们怎么组装在一起。

浙公网安备 33010602011771号