08 NestJS DTO 校验、Entity 脱敏与 Mapped Types 实战(TypeORM & Prisma)
前言
在了解DTO与Entity的区别之前,我们先来了解一下它们在项目中的数据路径。
[客户端 Client]
│
▼ (1. 携带 Request DTO)
[Controller] ── (2. 校验与格式转换: ValidationPipe)
│
▼ (3. 传递 DTO 或 解构参数)
[Service] ──── (4. 业务逻辑,将 DTO 转换为 Entity 或操作 ORM)
│
▼ (5. 写入/读取 Entity)
[Database]
│
▼ (6. 返回 Entity 给 Service)
[Service / Controller] ── (7. Entity 转换为 Response DTO / 序列化脱敏)
│
▼ (8. 返回安全响应)
[客户端 Client]DTO(Data Transfer Object)是数据传输对象,主要用于客户端与服务端之间的数据传输。它通常用于接收请求数据和返回响应数据,具有数据验证和格式转换的功能。
Entity(实体)是数据库中的数据模型,通常用于表示数据库表结构和数据关系。它主要用于与数据库进行交互,执行增删改查等操作。
虽然是这么说,但是在实际项目中,Entity 常常在 NestJS 中被兼职将数据安全返回给客户端(与 @Exclude() 和 ClassSerializerInterceptor 配合使用),这也是 NestJS 提供的一种极具性价比的偷懒方案,避免了开发者每个接口都去写一个 Response DTO。
特别是在与 Prisma ORM 结合使用时,Prisma 的 Entity 是由 Prisma 自动生成的,我们常常通过 TypeScript 的 implements 来约束 Entity 类必须实现 Prisma 的表结构类型,再通过 @Exclude() 等装饰器来实现数据脱敏转化,最后返回给客户端。
此处内容已隐藏回复后方可阅读。
分类:
NestJS中级
标签:
NestjsDTOEntityMapped Types
版权申明
本文系作者 @木灵鱼儿 原创发布在木灵鱼儿站点。未经许可,禁止转载。
暂无评论数据