1

我正在使用类验证器包来验证 GraphQL 输入类型中的链接。问题是当链接在输入字符串的末尾包含空格时验证失败。有什么方法可以在验证之前对其进行修剪吗?

import { InputType, Field, Int } from 'type-graphql';
import { IsUrl, IsOptional } from 'class-validator';
import { Project } from '../entities';

@InputType()
export default class UpdateProjectInput implements Partial<Project> {
    @Field(type => Int)
    id: number;

    @Field({ nullable: true })
    @IsUrl({}, { message: 'Link is not a valid url' })
    @IsOptional()
    link?: string;
}
4

1 回答 1

1

自定义装饰器

export default function Transform(
    cb: (value: any) => any
): (target: Object, propertyKey: string | symbol) => void {
    return function (target: Object, propertyKey: string | symbol) {
        Object.defineProperty(target, propertyKey, {
            set(value) {
                this.value = cb(value);
            },
            enumerable: true,
            configurable: true,
        });
    };
}

及其用法

@InputType()
export default class UpdateProjectInput implements Partial<Project> {
    @Field(type => Int)
    id: number;

    @Field({ nullable: true })
    @Transform(value => value?.trim())
    @IsUrl({}, { message: 'Link is not a valid url' })
    @IsOptional()
    link?: string;
}
于 2020-12-23T09:14:50.977 回答