nestjs使用pipe的whitelist后classvalidator如何定义可选字段?
app.useGlobalPipes(
new ValidationPipe({
whitelist: true,
}),
);
import { IsNotEmpty, IsString } from 'class-validator';
export class SignupUserDto {
@IsString()
@IsNotEmpty()
username: string;
password?: string;
}
上面的password是非必填,按照上面的写法,如果填了password,controller中拿不到password的值。
只有加上一个注解才可以。加上注解如果不传,又会提示password必须是字符串,怎么搞?
回复
1个回答
test
2024-07-03
没太理解你的需求,你开启了 whitelist
不就是主动丢弃了没加装饰器的字段了?但是你还不想丢弃?那你干嘛要开启它呢?
非要这么拧巴的话那你就也加个装饰器,同时指定仅当字段不为空时才验证吧:
import { ValidateIf, IsString } from 'class-validator';
@ValidateIf(dto => dto.password != null)
@IsString()
password?: string;
也可以写成:
import { IsOptional, IsString } from 'class-validator';
@IsOptional()
@IsString()
password?: string;
https://github.com/typestack/class-validator#validation-decorators
两者是等效的。
回复
适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容