我遇到的情况是我的客户端用户可以输入零个或多个地址。我的问题是,如果他输入地址,某些字段需要是必填的。
user.controller.ts
@Post()
@UsePipes(ValidationPipe)
async createUser(
@Body() createUser: CreateUserDto,
) {
return await this.service.saveUserAndAddress(createUser);
}
create-user.dto.ts
export class CreateUserDto {
@IsNotEmpty({ message: 'ERROR_REQUIRED_FULL_NAME' })
fullName?: string;
@IsNotEmpty({ message: 'ERROR_REQUIRED_PASSWORD' })
password?: string;
@IsNotEmpty({ message: 'ERROR_REQUIRED_EMAIL' })
@IsEmail({}, { message: 'ERROR_INVALID_EMAIL' })
email?: string;
...
addresses?: CreateUserAddressDto[];
}
创建用户地址.dto.ts
export class CreateUserAddressDto {
...
@IsNotEmpty()
street: string;
...
}
CreateUserDto
数据已正确验证并生成 InternalServerErrorResponse
,但当我的数组中有某些项目时,CreateUserAddressDto
数据未经过验证。知道如何进行此验证吗?
最佳答案
Nest fw 使用 class-transformer
将 json 转换为类对象。如果子属性不是原始值,则必须为它设置正确的类型。你的属性是一个数组,你必须配置告诉class-validator
它是一个数组,并验证每个项目。
让我们更新CreateUserDto
import { Type } from 'class-transformer';
import { ..., ValidateNested } from 'class-validator';
export class CreateUserAddressDto {
...
@ValidateNested({ each: true })
@Type(() => CreateUserAddressDto)
addresses?: CreateUserAddressDto[];
...
}
关于node.js - 当我需要验证数组的内容时,NestJS 中的 ValidationPipe 出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68989465/