如何在 NestJS 中编写嵌套 DTO

Posted

技术标签:

【中文标题】如何在 NestJS 中编写嵌套 DTO【英文标题】:How to write nested DTOs in NestJS 【发布时间】:2021-08-23 05:42:33 【问题描述】:

我是 NestJS 的初学者,我想为下面的结构写一个 DTO -


    something: 
        info: 
            title: string,
            score: number,
            description: string,
            time: string,
            DateOfCreation: string
        ,
        Store: 
            item: 
                question: string,
                options: 
                    item: 
                        answer: string,
                        description: string,
                        id: string,
                        key: string,
                        option: string
                    
                
            
        
    

我想为那个嵌套的 Data 对象写一个 DTO。我找不到在 NestJS 中编写嵌套 DTO 的可靠示例。我是 NestJS 的初学者,以前从未使用过 DTO。所以请不要以为我知道些什么。我将它与 Mongoose 一起使用。

【问题讨论】:

【参考方案1】:

您必须为架构中的每个对象创建单独的类,并创建一个将导入所有类的主类。

class Info 
    readonly title:string
    readonly score:number
    readonly description:string
    readonly dateOfCreation:Date


export class SampleDto 
    @Type(() => Info)
    @ValidateNested()
    readonly info: Info

    ...Follow same for the rest of the schema



参考:https://github.com/typestack/class-validator#validating-nested-objects

【讨论】:

天哪,这东西正盯着我的脸,但我看不见。非常感谢。将此标记为已接受的答案。对于未来的读者,这是同一问题的另一个答案 - ***.com/questions/53786383/… 注意是@ValidateNested(),不是@ValidatedNested()【参考方案2】:

//示例:

export class UserBaseDto 
  @ApiProperty(
    type: String,
    required: true,
    description: 'email user, minlength(4), maxlength(40)',
    default: "test@email.com",
  )
  @IsString()
  @MinLength(4)
  @MaxLength(40)
  @IsNotEmpty() 
  email: string;
//....enter code here

【讨论】:

以上是关于如何在 NestJS 中编写嵌套 DTO的主要内容,如果未能解决你的问题,请参考以下文章

NestJS:无法在 console.log 中获取嵌套对象。错误:类型 Dto 上不存在属性 x

NestJS + Typeorm + Graphql:嵌套关系中 DTO 的正确设计模式

如何在 NestJs 框架中使用 postgres 和 sequelize 正确定义 DTO 对象

如何在 DTO 中定义 ObjectId 以及在 NestJS Mongoose 中获取关系数据的正确查询是啥?

如何在 Nestjs 中为 @Body 构建 DTO

我们如何在DTO中使用对象数组和nestjs中的multipart-formdata?