做宠物店网站的素材,横岗做网站公司,网站如何伪静态,南宁网站建设lilkj在此之前我们用到的请求都是get请求#xff0c;接下来我们使用post 请求 并接收参数#xff0c;通过 Body 装饰器来取注意#xff1a;post请求带参数 我们通过游览器路径是直接请求不了的 需要使用postman 来发 post 请求postman 下载网站 https://www.postman.com/download…在此之前我们用到的请求都是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调用接口 传参数可以看到控制台接收了JSON数据我们再调用接口 age参数传11.23 也能调用成功 但是我在dto定义的时候 只定义了age 为number 但是传浮点数也能传这个可能会导致后面的逻辑错误所以就需要用到 ValidationPipe 我们需要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;
}再次请求 可以发现报错了 我们使用的 IsInt() 是来自于 class-validator class-validator提供了基于装饰器声明的规则对对象做校验的功能class-transformer 是把一个普通对象转换为某个 class 的实例对象以上两者结合实现了 ValidationPipe
流程如下我们创建了一个dto类 ---- 接着在pipe拿到类 将参数通过class-transformer 转换为 dto 类的对象最后使用class-validator 包来对这个对象做验证
我们可以自己来实现ValidationPipe 类
nest g pipe my-validation --flat --no-specimport { ArgumentMetadata, BadRequestException, Injectable, PipeTransform } from nestjs/common;
import { plainToInstance } from class-transformer;
import { validate } from class-validator;Injectable()
export class MyValidationPipe implements PipeTransformany {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则无法进行转换和验证如果有metatype则进行下一步通过 class-transformer 的 plainToInstance 把普通对象转换为 dto class 的实例对象最后进行验证 调用 class-validator 包的 validate api 我们来使用看一下效果
Post(postTest)postTest(Body(new MyValidationPipe()) obj: TestDto) {console.log(obj);return 调用成功}再次调用可以发现检测出了错误 当然以上只是个例子 并不完善 所以使用的时候还是所以内置的 ValidationPipe