用 NestJS 从零开发一个完整的小项目:图书管理系统(第二阶段:DTO + 参数校验 + 数据转换)
第二阶段目标我们把POST /books改造成请求{ name:NestJS实战, author:Tom }通过校验返回{ id:1, name:NestJS实战, author:Tom }错误{ message:[ name不能为空, author必须是字符串 ] }第一步安装校验依赖Nest 使用class-validatorclass-transformer安装pnpm add class-validator class-transformer作用包作用class-validator定义规则class-transformer类型转换第二步修改 CreateBookDto找到src/books/dto/create-book.dto.ts现在export class CreateBookDto {}改成import { IsString, IsNotEmpty } from class-validator; export class CreateBookDto { IsString() IsNotEmpty() name:string; IsString() IsNotEmpty() author:string; }解释例如{ name:NestJS }通过IsString()检查name是不是字符串第三步开启全局验证打开main.ts原来async function bootstrap() { const app await NestFactory.create(AppModule); await app.listen(3000); }修改import { ValidationPipe } from nestjs/common; async function bootstrap() { const app await NestFactory.create(AppModule); app.useGlobalPipes( new ValidationPipe() ); await app.listen(3000); }现在所有 Controller 的Body()都会自动验证。第四步测试新增重新启动pnpm run start:dev正确请求POSThttp://localhost:3000/booksBody{ name:NestJS, author:Tom }成功。错误测试发送{ name:, author:123 }返回{ message:[ name should not be empty, name must be a string, author must be a string ], error:Bad Request, statusCode:400 }说明校验生效。第五步理解执行流程现在请求POST /books进入BooksController↓这里create( Body() createBookDto:CreateBookDto )↓Nest先执行ValidationPipe↓检查CreateBookDto规则↓通过进入BooksService流程请求 ↓ Pipe ↓ Controller ↓ Service ↓ 返回第六步UpdateDto 为什么能部分更新你之前看到UpdateBookDto打开update-book.dto.ts应该类似import { PartialType } from nestjs/mapped-types; import { CreateBookDto } from ./create-book.dto; export class UpdateBookDto extends PartialType(CreateBookDto){}重点PartialType()作用把class CreateBookDto{ name:string; author:string; }变成class UpdateBookDto{ name?:string; author?:string; }也就是创建{ name:NestJS, author:Tom }必须全部传。更新{ name:新版NestJS }可以只传部分。到这里你掌握DTO ↓ class-validator ↓ ValidationPipe ↓ 数据校验 ↓ PartialType这是 Nest 企业开发每天都会用的东西。

相关新闻

昇腾CANN信号处理加速库sip的FFT变换BLAS向量运算FIR数字滤波算子性能瓶颈分析方法与基带数据处理器实战部署系统优化策略方案

昇腾CANN信号处理加速库sip的FFT变换BLAS向量运算FIR数字滤波算子性能瓶颈分析方法与基带数据处理器实战部署系统优化策略方案

前言 SiP库全称Ascend Signal Processing Boost,是华为基于CANN计算框架和昇腾NPU硬件体系专门构建的信号处理算子集合。该库面向无线通信、雷达信号处理、音频分析、工业测控等需要向量化高速运算的领域,在昇腾AI处理器的Da Vinci架构上对FFT、BLAS、FI…

2026/6/25 0:15:34阅读更多 →
终极指南:用TegraRcmGUI轻松解锁Switch隐藏功能

终极指南:用TegraRcmGUI轻松解锁Switch隐藏功能

终极指南:用TegraRcmGUI轻松解锁Switch隐藏功能 【免费下载链接】TegraRcmGUI C GUI for TegraRcmSmash (Fuse Gele exploit for Nintendo Switch) 项目地址: https://gitcode.com/gh_mirrors/te/TegraRcmGUI 对于想要探索Nintendo Switch更多可能性的技术探…

2026/6/25 0:17:18阅读更多 →
如何为工业级大规模逻辑应用选择FPGA?XC6SLX150-2FGG900I的147K LE与-40°C~100°C宽温方案解析

如何为工业级大规模逻辑应用选择FPGA?XC6SLX150-2FGG900I的147K LE与-40°C~100°C宽温方案解析

XC6SLX150-2FGG900I:AMD Xilinx Spartan-6 LX系列高端FPGA深度解析在通信基础设施、工业自动化、视频处理以及各类对逻辑资源和I/O带宽有综合要求的中高端嵌入式应用中,FPGA的选型往往需要在逻辑容量、性能和成本之间寻求最佳平衡。AMD(原Xil…

2026/6/24 21:22:28阅读更多 →
MPC862程序流追踪与硬件调试:从原理到实战解决嵌入式通信系统难题

MPC862程序流追踪与硬件调试:从原理到实战解决嵌入式通信系统难题

1. MPC862程序流追踪:从硬件原理到实战调试在嵌入式通信系统的开发里,最让人头疼的莫过于程序“跑飞”了。你看着板子上的指示灯乱闪,串口输出一堆乱码,但就是不知道CPU到底执行了哪条指令、在哪个分支上出了问题。尤其是在像MPC8…

2026/6/24 23:23:10阅读更多 →
基于Tor Hidden Service的匿名通信系统Ricochet架构深度解析

基于Tor Hidden Service的匿名通信系统Ricochet架构深度解析

1. 项目概述:为什么我们需要一个“终极”匿名通信方案?在数字世界里,隐私和匿名性正变得越来越奢侈。我们每天使用的即时通讯工具,无论是微信、Telegram还是Signal,都在不同程度上依赖于中心化的服务器。这意味着&…

2026/6/24 23:23:10阅读更多 →
多重冒号(::)在编程中的核心作用:从命名空间到代码组织

多重冒号(::)在编程中的核心作用:从命名空间到代码组织

1. 项目概述:从“多重冒号”到代码的优雅表达最近在代码审查和开源项目里,我时不时会看到一个叫“Multiple-Colon”的讨论点。乍一看这个标题,你可能会有点懵:冒号不就是个标点吗,还能玩出什么花样?但如果你…

2026/6/24 23:23:10阅读更多 →
LINPACK基准测试:从原理到实战,全面解析HPC性能评估金标准

LINPACK基准测试:从原理到实战,全面解析HPC性能评估金标准

1. 项目概述:从“超级计算机的标尺”到“无处不在的性能度量”如果你在服务器、高性能计算(HPC)甚至个人电脑的评测里,看到过“双精度浮点性能达到XX TFlops”这样的描述,那背后十有八九站着LINPACK的身影。LINPACK Be…

2026/6/24 23:23:10阅读更多 →
OpenClaw:面向业务流程的智能体操作系统架构解析

OpenClaw:面向业务流程的智能体操作系统架构解析

1. OpenClaw 不是“另一个 Agent 框架”,而是面向真实业务流的智能体操作系统 你点开 GitHub 上 OpenClaw 的 README,第一眼看到的不是“支持多模型”“内置 20 Skill”,而是一张带虚线边框的三层架构图:最上层写着 Business Fl…

2026/6/24 23:23:10阅读更多 →
Claude Code Auto Mode:CLI驱动的VS Code智能协同范式

Claude Code Auto Mode:CLI驱动的VS Code智能协同范式

1. Auto Mode不是“全自动”,而是Claude Code里最被误解的交互范式很多人第一次看到“Claude Code Auto Mode”这个名称,下意识就联想到“代码全自动生成”“不用敲一个字就能跑通项目”——我刚接触时也这么想。结果在VS Code里点开Auto Mode&#xff0…

2026/6/24 23:18:07阅读更多 →
【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体 一文搞定到底什么是智能体【人工智能】一文搞定到底什么是智能体一. LM,WorkFlow,Agent分别有什么么不同二. Agent的思考过程是怎样的三. Agent的五个核心部分1)LLM2)Prompt3)Me…

2026/6/24 7:33:03阅读更多 →
嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

1. 嵌入式GUI控件:从原理到实战的深度解析在嵌入式系统开发中,图形用户界面(GUI)的设计与实现往往是项目从“能用”到“好用”的关键一跃。不同于资源充沛的PC或移动平台,嵌入式设备的GUI需要在有限的CPU性能、内存空间…

2026/6/24 2:12:09阅读更多 →
Google AI Studio 300美元额度的真相与实战指南

Google AI Studio 300美元额度的真相与实战指南

1. 这300美金不是“送钱”,而是Google埋下的第一道技术门槛 你看到标题里那个醒目的“$300美金”时,第一反应可能是:又一个免费额度?领完就完事?我亲手试过——这300美金根本不是红包,而是一张入场券&…

2026/6/24 7:37:00阅读更多 →