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
}
我正在使用 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
}