Nestjs Swagger CLI 插件显示关系中的实体,而不是仅显示我的模块导入的实体

Nestjs Swagger CLI Plugin displays entities from relations instead of only showing the entity imported by my module

我正在使用 Nest 的 CLI Plugin 自动为我的文档添加注释。

问题是插件不仅加载了我的模块导入的实体,还加载了关系中引用的所有实体到 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 方法是 returning 实体,例如,createCidade(): Promise {}

我实现了 ResponseDto(基于 JSend 标准)。它的一个属性保存数据,例如创建的资源 Cidade。

我的方法 return 这个 DTO 不是 return 实体。这从 Swagger UI 的架构中删除了所有不需要的实体,并将它们替换为 ResponseDTO。

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

示例:在我使用 return 用户实体的方法时阻止 Swagger 加载密码关系。

@Entity('users', { schema: 'public' })
export class Users {
    ...
    @ApiHideProperty()  
    @OneToOne(() => Passwords, (passwords) => passwords.idUser)     
    passwords: Passwords
}