1

我正在使用 Nest 的CLI 插件为我的文档自动注释内容。

问题是,插件不仅加载了我的模块导入的实体,还将关系中引用的所有实体加载到 Swagger UI 中。

例如,我的 Cidades 模块使用以下具有 3 个关系的实体:

@Index('cidades_pkey', ['idCidade'], { unique: true })
@Entity('cidades', { schema: 'public' })
export class Cidades {
    @PrimaryGeneratedColumn({ type: 'bigint', name: 'id_cidade' })
    idCidade: string

    @Column('text', { name: 'nome' })
    nome: string
    
    // Entities from these relations are displayed in the Schemas of Swagger UI
    @OneToMany(() => Grupos, (grupos) => grupos.idCidade)
    grupos: Grupos[]

    @OneToMany(() => Instituicoes, (instituicoes) => instituicoes.idCidade)
    instituicoes: Instituicoes[]

    @OneToMany(() => Usuarios, (usuarios) => usuarios.idCidade)
    usuarios: Usuarios[]
}

这些关系中的实体也显示在我的Schemas上。

我只想显示 Cidades,即我的模块导入的实体。我尝试使用 @ApiHideProperty() 装饰器来隐藏关系,但没有奏效。这种行为有什么解决方法吗?

编辑: 我找到了一个权宜之计的解决方案。我的 CRUD 方法正在返回实体,例如 createCidade(): Promise<Cidade> {}

我实现了一个 ResponseDto(基于 JSend 标准)。它的属性之一包含创建的资源 Cidade 之类的数据。

我的方法没有返回实体,而是返回此 DTO。这从 Swagger UI 的模式中删除了所有不需要的实体,并将它们替换为 ResponseDTO。

4

1 回答 1

-1

我找到了更好的解决方案。您可以在 TypeORM 实体的所有关系上使用@ApiHideProperty()装饰器,这样它就不会被加载到 Swagger-UI 模式中。

示例:当我使用返回用户实体的方法时,停止 Swagger 加载密码关系。

@Entity('users', { schema: 'public' })
export class Users {
    ...
    @ApiHideProperty()  
    @OneToOne(() => Passwords, (passwords) => passwords.idUser)     
    passwords: Passwords
}
于 2021-07-21T22:19:12.203 回答