客户端提供的数据我们在服务端可以验证一下是否符合规定。
先给项目安装两个包,在终端,项目所在目录的下面,执行 npm install 安装 class-validator 还有 class-transformer 。
配置全局 ValidationPipe
安装完成以后,回到项目。然后再配置一个全局的验证管道,打开 AppCommonModule 模块,在里面添加一个 providers ,提供一个数组,里面添加一个对象,先设置一下 provide,值设置成 APP_PIPE,这个东西来自 @nestjs/core 这个包。再用一个 useFactory 返回要提供的东西。
新建一个 ValidationPipe,给这个验证管道提供一个配置对象,把 whitelist 设置成 true,这样会过滤掉客户端提供的多余的属性。再把 stopAtFirstError 也设置成 true, 这样一个属性如果有多个验证的话,只要其中一个验证有问题,就会停止验证其它的规则 。
验证数据
下面我们可以先验证一下创建用户接口需要的数据,打开 create-user-dto ,在这个 name 属性的上面,使用一个装饰器,@IsNotEmpty ,它来自刚才我们安装的 class-validator,提供一个配置对象,设置一下 message,值可以设置成“请提供用户名”。
在 password 上面,也可以添加一个 @IsNotEmpty,提供一个对象,设置一下错误信息,“请提供用户密码”,在上面可以再规定一下密码长度,用一个 @Length 装饰器,最小长度是 6,最大长度是 24,再提供一个配置对象,设置一下错误信息,message,“密码长度不符合要求(6-24位之间)”。
测试
最后可以测试一下,在 Http 客户端,打开创建用户这个请求,这里我们从请求主体里把 name 去掉,发送一下这个请求,这回得到了一个异常响应,在 message 里面会有一条错误信息,提示请提供用户名。
再试一下,把密码长度改成 6 位以下,发送一下请求,也会得到一个异常响应,提示密码长度不符合要求。