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

NestJS自定义输入验证:DTO条件校验实现方法

条件验证实现方案:当value1为"toy"时value2不能为空

针对你定义的TypeScript DTO,这里提供两种实用的实现方式:

方式一:使用class-validator库(TypeScript常用验证方案)

这是Node.js/TypeScript项目里做DTO验证的主流方式,步骤如下:

  1. 先安装依赖:
npm install class-validator class-transformer
  1. 修改DTO,通过@ValidateIf结合@IsNotEmpty实现条件验证:
import { IsNotEmpty, ValidateIf } from 'class-validator';

export class InputDTO {
  value1: string;

  // 只有当value1等于"toy"时,才触发value2的非空验证
  @ValidateIf((obj) => obj.value1 === 'toy')
  @IsNotEmpty({ message: '当value1为"toy"时,value2不能为空' })
  value2: string;
}
  1. 在业务代码中调用验证:
import { validate } from 'class-validator';

async function checkInputValidity(input: InputDTO) {
  const validationErrors = await validate(input);
  if (validationErrors.length > 0) {
    // 提取错误信息并处理,比如抛出异常或返回给前端
    const errorMessages = validationErrors.map(err => Object.values(err.constraints)).join(', ');
    throw new Error(errorMessages);
  }
}

方式二:手动编写验证逻辑(无需第三方库)

如果不想引入额外依赖,可以直接在DTO里写验证方法:

export class InputDTO {
  value1: string;
  value2: string;

  // 自定义验证方法
  validate(): string[] {
    const errors: string[] = [];
    // 判断value1为"toy"且value2为空(含纯空格的情况)
    if (this.value1 === 'toy' && (!this.value2 || this.value2.trim() === '')) {
      errors.push('当value1为"toy"时,value2不能为空');
    }
    return errors;
  }
}

// 使用示例
const testInput = new InputDTO();
testInput.value1 = 'toy';
testInput.value2 = '   '; // 空字符串或纯空格都会触发错误

const errors = testInput.validate();
if (errors.length > 0) {
  console.error('验证失败:', errors.join(''));
}

内容的提问来源于stack exchange,提问作者Tony Mathew

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 13:47:18