nestjs(第二章)请求的参数校验,dto

一些问题

nest集成了ts,我们可以通过ts做数据类型校验,为什么还要用dto?
答:因为ts的类型校验只是在编写代码的时候给开发者看的,再搭配相应的编辑器插件,来进行约束或者类型提示,实际是不会转译到js里;但dto是通过class来约束,js有class这个数据类型,这个是会被转译到js里去的。所以推荐用dot而非ts的interface来声明数据类型

一个朴素的dto

声明
在这里插入图片描述
使用,表示将收到一个UserReqDto类型的body,且将返回一个UserResDto类型的响应数据
在这里插入图片描述
在这里插入图片描述
可见我们在class里还是使用的ts来描述成员类型,之前就说过ts是不会转译到js里的,所以用这种朴素的dto校验只能校验数据中是否包含和class中的成员同名的属性(若收到{ id: 123, pwd: 456 },明明收到的是number类型也不会告知类型错误,它只能保证有id和pwd两个属性)。所以我们还需要一种更好的校验方式,如后:

class-validator

安装
$ npm i --save class-validator class-transformer
使用

第一步:在main.ts中注册ValidationPipe校验管道
在这里插入图片描述

第2步:在.dto.ts中使用class-validator中的装饰器来校验类型,装饰器名字还是比较易懂,故不赘述
在这里插入图片描述
这样如果传入的·类型不对,也能被检验出来并报错,似如下参数,pwd应该是string但传了个number,便报错如右:(错在哪一目了然)
在这里插入图片描述

结语

如上便是参数类型校验的一些基操,还有更多细腻操作以后再记录,如有谬误之处还请斧正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值