模块生成
nest g resource user --no-spec
模块结构
src/user/
├── user.controller.ts 👉 控制器
├── user.service.ts 👉 服务层
├── user.module.ts 👉 模块文件
├── dto/
│ ├── create-user.dto.ts 👉 创建用户时的数据格式约束
│ └── update-user.dto.ts 👉 更新用户时的数据格式约束
├── entities/
│ └── user.entity.ts 👉 定义“用户”这个数据结构
关系描述
[客户端/浏览器]
|
v
┌────────────────────────────┐
│ user.controller.ts │ ←—— 接收 HTTP 请求,提取参数
└────────────────────────────┘
|
| 调用
v
┌────────────────────────────┐
│ user.service.ts │ ←—— 处理业务逻辑(不操作 HTTP)
└────────────────────────────┘
|
需要结构定义/格式验证
┌──────────────┐
│ DTO(2个) │ ←—— 用户提交数据的结构限制
│ create-user │ 例如 { username, password }
│ update-user │ 例如 { password }
└──────────────┘
|
有需要时返回标准结构
↓
┌─────────────────────┐
│ user.entity.ts │ ←—— 描述“用户”是个什么样的数据结构(字段)
└─────────────────────┘
所有这些东西都被集中注册到:
┌────────────────────────────┐
│ user.module.ts │ ←—— 模块定义,注册 Controller + Service
└────────────────────────────┘
|
注册到主程序的模块入口:
↓
┌────────────────────────────┐
│ app.module.ts │ ←—— 应用根模块,加载所有功能模块
└────────────────────────────┘
| 文件 | 作用 | 举例比喻 |
|---|---|---|
user.controller.ts | 路由入口,收到请求后调用 service 处理 | 服务员,点菜的入口 |
user.service.ts | 执行实际逻辑,比如“查用户有没有注册” | 厨师,真正干活的人 |
create-user.dto.ts | 定义“注册新用户”时应该传哪些字段(校验规则也写这里) | 点菜表的格式 |
update-user.dto.ts | 定义“更新用户”时的数据结构 | 修改菜单项的格式 |
user.entity.ts | 描述“用户”这个概念,包括字段、类型 | 菜单上这道菜长啥样 |
user.module.ts | 把 controller + service 组合注册成一个“功能包” | 餐厅里的厨师 + 服务员归在一个厨房模块里 |
app.module.ts | 项目主模块,把所有模块都挂进来 | 总前台,决定哪个厨房负责做哪个菜 |