当前位置: 首页 > news >正文

第十六章 ValidationPipe验证post请求参数


在此之前我们用到的请求都是get请求,接下来我们使用post 请求 并接收参数,通过 @Body 装饰器来取
注意:post请求带参数 我们通过游览器路径是直接请求不了的 需要使用postman 来发 post 请求
postman 下载网站 https://www.postman.com/downloads

首先 post 请求参数 我们需要通过一个dto class 来接收,
先创建一个 dto class 名称:test.dto.ts

export class TestDto {id: number;name: string;age: number;
}

增加post接口:

@Post('postTest')postTest(@Body() obj: TestDto) {console.log(obj);return '调用成功'}

使用postman调用接口 传参数
1719146719945.png
可以看到控制台接收了JSON数据1719146735879.png
我们再调用接口 age参数传11.23 也能调用成功 但是我在dto定义的时候 只定义了age 为number 但是传浮点数也能传,这个可能会导致后面的逻辑错误,所以就需要用到 ValidationPipe
1719146772995.png
我们需要2个包:

npm install class-validator class-transformer

修改postTest 接口 在body接收参数使用 ValidationPipe

@Post('postTest')postTest(@Body(new ValidationPipe()) obj: TestDto) {console.log(obj);return '调用成功'}

接着我们在test.dto.ts进行修改:

import { IsInt } from "class-validator";export class TestDto {id: number;name: string;@IsInt()age: number;
}

再次请求 可以发现报错了
1719147134135.png
我们使用的 @IsInt() 是来自于 class-validator,
class-validator提供了基于装饰器声明的规则对对象做校验的功能
class-transformer 是把一个普通对象转换为某个 class 的实例对象
以上两者结合实现了 ValidationPipe

流程如下:
我们创建了一个dto类 ----> 接着在pipe拿到类 将参数通过class-transformer 转换为 dto 类的对象,最后使用class-validator 包来对这个对象做验证

我们可以自己来实现ValidationPipe 类:

nest g pipe my-validation --flat --no-spec
import { ArgumentMetadata, BadRequestException, Injectable, PipeTransform } from '@nestjs/common';
import { plainToInstance } from 'class-transformer';
import { validate } from 'class-validator';@Injectable()
export class MyValidationPipe implements PipeTransform<any> {async transform(value: any, { metatype }: ArgumentMetadata) {if (!metatype) {return value;}const object = plainToInstance(metatype, value);const errors = await validate(object);if (errors.length > 0) {throw new BadRequestException('参数验证失败');}return value;}
}

metatype 拿到的就是下面 TestDto ,如果没有声明Dto则无法进行转换和验证
1719148127975.png
如果有metatype则进行下一步通过 class-transformer 的 plainToInstance 把普通对象转换为 dto class 的实例对象
最后进行验证 调用 class-validator 包的 validate api
我们来使用看一下效果:

@Post('postTest')postTest(@Body(new MyValidationPipe()) obj: TestDto) {console.log(obj);return '调用成功'}

再次调用
1719148463518.png
可以发现检测出了错误 当然以上只是个例子 并不完善 所以使用的时候还是所以内置的 ValidationPipe

相关文章:

第十六章 ValidationPipe验证post请求参数

在此之前我们用到的请求都是get请求&#xff0c;接下来我们使用post 请求 并接收参数&#xff0c;通过 Body 装饰器来取注意&#xff1a;post请求带参数 我们通过游览器路径是直接请求不了的 需要使用postman 来发 post 请求postman 下载网站 https://www.postman.com/download…...

HippoRAG如何从大脑获取线索以改进LLM检索

知识存储和检索正在成为大型语言模型(LLM)应用的重要组成部分。虽然检索增强生成(RAG)在该领域取得了巨大进步&#xff0c;但一些局限性仍然没有克服。 俄亥俄州立大学和斯坦福大学的研究团队推出了HippoRAG&#xff0c;这是一种创新性的检索框架&#xff0c;其设计理念源于人类…...

求函数最小值-torch版

目标&#xff1a;torch实现下面链接中的梯度下降法 先计算 的导函数 &#xff0c;然后计算导函数 在处的梯度 (导数) 让 沿着 梯度的负方向移动&#xff0c; 自变量 的更新过程如下 torch代码实现如下 import torchx torch.tensor([7.5],requires_gradTrue) # print(x.gr…...

如何将HEVC格式的视频转换为无损、未压缩的MP4格式视频?

在和大家分享视频格式转换之前&#xff0c;先跟大家分享一下HEVC格式的视频到底是什么文件&#xff1f;压缩原理是什么&#xff1f;了解了它的本质之后&#xff0c;我们就可以知道如何保证视频高清无损了。 如何将HEVC格式的视频转换为无损、未压缩的MP4格式视频&#xff1f; …...

自定义在线活动报名表单小程序源码系统 源代码+搭建部署教程 可二次定制开发

系统概述 在数字化时代&#xff0c;线上活动成为连接用户与组织的重要桥梁。为了高效地管理活动报名流程&#xff0c;一款灵活、易用的在线活动报名表单小程序显得尤为重要。本文旨在为开发者提供一套全面的解决方案&#xff0c;包括自定义在线活动报名表单小程序的源代码分析…...

数据分析入门指南:表结构数据(三)

在数字化转型的浪潮中&#xff0c;表结构数据作为企业决策支持系统的核心要素&#xff0c;其重要性日益凸显。本文深入剖析了表结构数据的本质特征、高效处理策略&#xff0c;并探讨了其在现代商业智能环境中的广泛应用&#xff0c;旨在为数据分析师与决策者提供前沿洞察与实战…...

凌凯科技前五大客户依赖症加剧:研发费用率骤降,应收账款大增

《港湾商业观察》黄懿 6月13日&#xff0c;上海凌凯科技股份有限公司&#xff08;下称“凌凯科技”&#xff09;在港交所提交上市申请&#xff0c;拟于主板上市&#xff0c;华泰国际为其独家保荐人。 凌凯科技致力于提供小分子化合物技术和产品解决方案&#xff0c;专注于制药…...

5 科大讯飞AI大赛:热力学定律的电池材料生产参数动态调控

赛题名称&#xff1a;基于热力学定律的电池材料生产参数动态调控挑战赛 赛题类型&#xff1a;数据挖掘 赛题任务&#xff1a;利用时空模型进行建模并预测匣钵实际温度 赛题链接&#xff1a;https://challenge.xfyun.cn/topic/info?typebattery-material&optiontjjg&…...

概论(二)随机变量

1.名词解释 1.1 样本空间 一次具体实验中所有可能出现的结果&#xff0c;构成一个样本空间。 1.2 随机变量 把结果抽象成数值&#xff0c;结果和数值的对应关系就形成了随机变量X。例如把抛一次硬币的结果&#xff0c;正面记为1&#xff0c;反面记为0。有变量相对应的就有自…...

Apache AGE 安装部署

AGE概述 概述 我们可以通过源码安装、拉取docker镜像运行、直接使用公有云三种方式中的任意一种来使用Apache AGE 获取 AGE 发布版本 可以在 https://github.com/apache/age/releases 找到发布版本和发布说明。 源代码 源代码可以在 https://github.com/apache/age 找到…...

Python29 Tensorflow的基本知识和使用

1. TensorFlow TensorFlow 是一个开源的机器学习框架&#xff0c;由 Google Brain 团队开发。它用于数据流图的计算&#xff0c;尤其擅长深度学习任务。在 TensorFlow 中&#xff0c;数据流图&#xff08;Data Flow Graph&#xff09;是其核心概念之一&#xff0c;它定义了计算…...

Linux操作系统上用到的磁盘分区管理工具

parted磁盘分区工具 磁盘格式&#xff1a;MBR, GPT, 这两种名称分别是硬盘里面分区表两种格式的称呼&#xff0c; 第一种MBR格式的分区表最大支持2TB的容量&#xff0c; 磁盘的三种分区主分区&#xff0c;扩展分区&#xff0c;逻辑分区&#xff0c;主分区扩展分区<4 第…...

Python数据结构的库之Fuk使用详解

概要 fuk 是一个用于处理 Python 数据结构的库,全称为 "Fast and Uncomplicated Kit"。它提供了一系列高效、简洁的数据结构实现,以及对 Python 内置数据结构的扩展。通过使用 fuk,开发者可以更加方便地处理列表、集合、字典等数据类型,提高代码的执行效率和可读…...

【STM32学习】cubemx配置,串口的使用,串口发送接收函数使用,以及串口重定义、使用printf发送

1、串口的基本配置 选择USART1&#xff0c;选择异步通信&#xff0c;设置波特率 选择后&#xff0c;会在右边点亮串口 串口引脚是用来与其他设备通信的&#xff0c;如在程序中打印发送信息&#xff0c;电脑上打开串口助手&#xff0c;就会收到信息。 串口的发送接收&#xff0…...

复现MiDAS文章:文章数据和代码

介绍 MiDAS 4: A global catalogue of full-length 16S rRNA gene sequences and taxonomy for studies of bacterial communities in wastewater treatment plants 提供了全套的代码和数据&#xff0c;方便大家复现&#xff1a; github: https://github.com/ msdueholm/MiD…...

【Python专栏】Python的历史及背景介绍

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Python专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Python的背景介绍 关键词&#xff1a;Python、优缺点、领域 目录 …...

web端已有项目集成含UI腾讯IM

通过 npm 方式下载 TUIKit 组件&#xff0c;将 TUIKit 组件复制到自己工程的 src 目录下&#xff1a; npm i tencentcloud/chat-uikit-vue mkdir -p ./src/TUIKit && rsync -av --exclude{node_modules,package.json,excluded-list.txt} ./node_modules/tencentcloud/…...

IF不降反增!审稿速度,比我家网速还快!3本接受率高的医学期刊,赶紧码住!

&#x1f50d; 为什么选择这3本期刊&#xff1f; 今天老毕给大家分享3本医学 SCI&#xff0c;分别为Tumori Journal、Adipocyte以及Annals of Medicine。 这3本医学杂志&#xff0c;不仅审稿速度快&#xff0c;录用率还高&#xff0c;其中不乏接受率为48%的“毕业神刊”。2024年…...

怎样把视频字幕提取出来?分享4个零门槛的字幕提取工具

暑假正是弯道超车的好机会&#xff01;相信不少朋友都会选择宅在家自学网课。 不可否认的是&#xff0c;海量学习资源的确可以让学习变得更加便捷与自由。然而&#xff0c;如何高效地吸收和理解在线课程也就成为了一个关键问题。不敢想倘若此时能够拥有一款高效又实用的视频提…...

PostgreSQL 里怎样解决多租户数据隔离的性能问题?

文章目录 一、多租户数据隔离的性能问题分析&#xff08;一&#xff09;大规模数据存储和查询&#xff08;二&#xff09;并发访问和锁争用&#xff08;三&#xff09;索引维护成本高&#xff08;四&#xff09;资源分配不均 二、解决方案&#xff08;一&#xff09;数据分区&a…...

[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?

&#x1f9e0; 智能合约中的数据是如何在区块链中保持一致的&#xff1f; 为什么所有区块链节点都能得出相同结果&#xff1f;合约调用这么复杂&#xff0c;状态真能保持一致吗&#xff1f;本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里&#xf…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例

一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下&#xff0c;江苏艾立泰以一场跨国资源接力的创新实践&#xff0c;重新定义了绿色供应链的边界。 跨国回收网络&#xff1a;废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点&#xff0c;将海外废弃包装箱通过标准…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序&#xff0c;以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务&#xff0c;提供稳定高效的数据处理与业务逻辑支持&#xff1b;利用 uniapp 实现跨平台前…...

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题&#xff1a;3564. 季节性销售分析 题目&#xff1a; 表&#xff1a;sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

Spring数据访问模块设计

前面我们已经完成了IoC和web模块的设计&#xff0c;聪明的码友立马就知道了&#xff0c;该到数据访问模块了&#xff0c;要不就这俩玩个6啊&#xff0c;查库势在必行&#xff0c;至此&#xff0c;它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据&#xff08;数据库、No…...

MySQL账号权限管理指南:安全创建账户与精细授权技巧

在MySQL数据库管理中&#xff0c;合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号&#xff1f; 最小权限原则&#xf…...