Javascript 验证nestjs中的多层嵌套对象

Javascript 验证nestjs中的多层嵌套对象,javascript,node.js,nestjs,class-validator,Javascript,Node.js,Nestjs,Class Validator,我试图在nestJs中使用类验证器装饰器来验证以下类型的输入请求 { address: string location: { longitude: string, latitude : string } } 。问题是它仅限于一层嵌套对象。下面的一个有效 class ProjectLocation { @IsString() address: string; } export class CreateProject

我试图在nestJs中使用类验证器装饰器来验证以下类型的输入请求

{
    address: string
    location: { 
        longitude: string, 
        latitude : string
    }
}
。问题是它仅限于一层嵌套对象。下面的一个有效

class ProjectLocation { 
    @IsString()
    address: string; 
}

export class CreateProjectDto {

    @ValidateNested({each:true})
    @Type(()=>ProjectLocation)
    location:ProjectLocation
}
但是,当另一个嵌套层添加到ProjectLocation时,它将不起作用,并且您不能在ProjectLocation中使用@ValidatedNested向其添加另一个类类型

错误:没有与此调用匹配的重载


如我预期的那样,考虑如下:

class SomeNestedObject {
    @IsString()
    someProp: string;
}

class ProjectLocation {
    @IsString()
    longitude: string;
    @IsString()
    latitude: string;
    @ValidateNested()
    @IsNotEmpty()
    @Type(() => SomeNestedObject)
    someNestedObject: SomeNestedObject;
}

export class CreateProjectDto {
    @IsString()
    address: string;
    @ValidateNested()
    @Type(() => ProjectLocation)
    location: ProjectLocation;
}
请注意,我在
someNestedObject
上使用
IsNotEmpty
来处理缺少道具的情况


以下是正确验证的无效请求的两个示例:

例1:

Request-Body:    
    {
        "address": "abc",
        "location": { 
            "longitude": "123",
            "latitude" : "456",
            "someNestedObject": {}
        }
    }

Response:
{
    "statusCode": 400,
    "message": [
        "location.someNestedObject.someProp should not be empty"
    ],
    "error": "Bad Request"
}
例2:

Request-Body:
{
    "address": "abc",
    "location": { 
        "longitude": "123",
        "latitude" : "456"
    }
}
Response:
{
    "statusCode": 400,
    "message": [
        "location.someNestedObject should not be empty"
    ],
    "error": "Bad Request"
}

谢谢你也为我工作。似乎我们应该显式地要求它在嵌套对象键上验证某些内容,使其验证内部类型。这在数组的情况下不起作用。我们如何处理它