You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 13:09:17