Nest.js中如何使用class-validator校验日期与数组元素唯一性
Nest.js + class-validator 两类校验实现方案
两个需求都可以直接通过class-validator内置装饰器快速实现,不需要额外写复杂自定义校验:
日期不能早于当前时间
用内置的@MinDate装饰器即可,注意不要直接传固定new Date(),否则会取服务启动时的时间作为校验基准,导致服务运行久了校验不准。0.14.0及以上版本支持传入函数动态返回校验时刻的当前时间,同时自定义错误提示即可:
import { Field } from '@nestjs/graphql'; import { MinDate } from 'class-validator'; @Field(() => Date, { description: 'Due Date' }) @MinDate(() => new Date(), { message: "Date can't before than now" }) dueDate: Date;
如果用的是0.14.0以下的低版本,写个简单的自定义校验类获取实时时间即可,开发成本很低。
数组内ID唯一性校验
在原有UUID格式校验的基础上,叠加内置@ArrayUnique装饰器就能实现元素去重校验。这个装饰器默认用严格相等判断重复,完全适配字符串UUID的场景,你举例的两个相同UUID的入参会直接判定为校验不通过:
import { Field } from '@nestjs/graphql'; import { IsUUID, ArrayUnique } from 'class-validator'; @Field(() => [String], { description: 'product IDs' }) @IsUUID('all', { each: true, message: 'Product ID is not valid.' }) @ArrayUnique({ message: 'Duplicate product IDs are not allowed' }) productIds: string[];
注意:以上所有校验逻辑生效的前提是Nest应用已经注册了全局
ValidationPipe,否则class-validator的装饰器不会自动执行校验。
内容的提问来源于stack exchange,提问作者Alpin Cleopatra
相关产品推荐
相关产品推荐

