NodeJS 如何在nest.js DTO中同时允许大写和小写

3zwtqj6y  于 2023-01-25  发布在  Node.js
关注(0)|答案(2)|浏览(183)

我需要允许用户输入属性名称的大小写。例如,

日期:

import { ApiProperty } from "@nestjs/swagger";
import { IsDefined, Validate } from "class-validator";

export class DicomDto {

    @ApiProperty({ description: 'Image data' })
    @IsDefined()
    '7fe0,0010'?: string;
    
}

在这里,我希望用户给予输入“7fe0,0010”或“7FE0,0010”。但用户只能输入“7fe0,0010”或“7FE0,0010”中的一种,不能同时输入两种。
例如,输入应该是,

{
  '7fe0,0010': "imagedata" or '7FE0,0010': "imagedata"
}

但输入不应该是,

{
  '7fe0,0010': "imagedata",
  '7FE0,0010': "imagedata"
}

你能帮帮我吗有没有可能。

6pp0gazn

6pp0gazn1#

你可以定制验证修饰器XOR

import { registerDecorator, ValidationOptions, ValidationArguments } from 'class-validator';

export function XOR(property: string, validationOptions?: ValidationOptions) {
  return function(object: Object, propertyName: string) {
    registerDecorator({
      name: 'xor',
      target: object.constructor,
      propertyName: propertyName,
      constraints: [property],
      options: validationOptions,
      validator: {
        validate(value: any, args: ValidationArguments) {
          const [relatedPropertyName] = args.constraints;
          const relatedValue = (args.object as any)[relatedPropertyName];
          return Boolean(!!value ^ !!relatedValue);
        },
      },
    });
  };
}

use:

export class DicomDto {
    @ApiProperty({ description: 'Image data' })
    @XOR('7FE0,0010')
    '7fe0,0010'?: string;

    @ApiProperty({ description: 'Image data' })
    @XOR('7fe0,0010')
    '7FE0,0010'?: string;
    
}

如果两个字段都存在或不存在,类验证器将抛出错误

4jb9z9bj

4jb9z9bj2#

只需使用@Transform
像这样

相关问题