惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
DataBreaches.Net
N
Netflix TechBlog - Medium
P
Proofpoint News Feed
D
Docker
J
Java Code Geeks
L
LangChain Blog
Microsoft Security Blog
Microsoft Security Blog
The GitHub Blog
The GitHub Blog
I
InfoQ
Stack Overflow Blog
Stack Overflow Blog
云风的 BLOG
云风的 BLOG
Engineering at Meta
Engineering at Meta
MongoDB | Blog
MongoDB | Blog
月光博客
月光博客
T
Tailwind CSS Blog
M
MIT News - Artificial intelligence
Blog — PlanetScale
Blog — PlanetScale
Google DeepMind News
Google DeepMind News
腾讯CDC
罗磊的独立博客
U
Unit 42
爱范儿
爱范儿
Vercel News
Vercel News
MyScale Blog
MyScale Blog

木灵鱼儿

VS Code BYOK 配置生成器 - 木灵鱼儿 2026 最新禁止浏览器密码管理器弹出教程 - 木灵鱼儿 16 NestJS 企业级 RBAC 权限控制体系 - 木灵鱼儿 15 NestJS 统一响应体设计(信封模式) - 木灵鱼儿 14 NestJS 生产级错误过滤方案 - 木灵鱼儿 13 NestJS 集成 TypeORM 完全指南 - 木灵鱼儿 12 NestJS 集成 Prisma ORM 完全指南(Prisma v7) - 木灵鱼儿 11 NestJS 注册与登录接口的密码安全设计 - 木灵鱼儿 10 NestJS JWT 身份验证完全指南 - 木灵鱼儿 09 NestJS 使用 @nestjs-swagger 生成 API 文档 - 木灵鱼儿 07 NestJS 使用Caching缓存(cache-manager) - 木灵鱼儿 06 NestJS 使用Redis - 木灵鱼儿 05 Nestjs 高性能构建之SWC与Typescript7选型 - 木灵鱼儿 04 Nestjs API版本控制策略 - 木灵鱼儿 NestJS 正确处理日志 - 木灵鱼儿 NestJS config模块扩展用法.md - 木灵鱼儿 宝塔如何给网站一次性绑定两个域名 - 木灵鱼儿 NestJS 环境变量与配置管理(Config 模块) - 木灵鱼儿 如何使用 FNM 自动切换不同项目的 Node.js 版本 - 木灵鱼儿 如何使用 Node.js Corepack 自动锁定和切换项目包管理器版本 - 木灵鱼儿 日常开发中的 void:从忽略 Promise 到理解 JavaScript 历史写法 - 木灵鱼儿 git 进阶指南:如何用 Git Worktree 完美应对紧急 Bug 与多分支联调 - 木灵鱼儿 了解并解决 Git 大小写“无感”的幽灵 Bug - 木灵鱼儿 从零开始:手把手教你封装一个企业级 Axios 请求模块 - 木灵鱼儿 03-Vue Query 高级进阶:应对复杂业务场景的硬核套路 - 木灵鱼儿 02-Vue Query 快速入门:从零构建你的第一个声明式查询 - 木灵鱼儿 Windows 下如何快速复制目录的同时排除指定的目录和文件 - 木灵鱼儿 x86多网口软路由+pve+爱快ikuai+iStoreOS实现组网和翻墙 - 木灵鱼儿 生产部署时动态导入 Chunk 失效的实用回退方案 - 木灵鱼儿 如何在 Vite 项目中优雅地展示用户协议?(Markdown 转 Vue 组件方案) - 木灵鱼儿
08 NestJS DTO 校验、Entity 脱敏与 Mapped Types 实战(Type...
木灵鱼儿 · 2026-08-15 · via 木灵鱼儿

前言

在了解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() 等装饰器来实现数据脱敏转化,最后返回给客户端。

此处内容已隐藏回复后方可阅读。

版权申明

本文系作者 @木灵鱼儿 原创发布在木灵鱼儿站点。未经许可,禁止转载。