【问题标题】:NestJS Rest API show only some columns from database using TypeORMNestJS Rest API 使用 TypeORM 仅显示数据库中的某些列
【发布时间】:2020-04-11 19:20:34
【问题描述】:

我只想使用 NestJS 和 TypeORM 显示实体中的一些列。这些是我在实体中的列:

@Entity({ name: "products" })
export class Product extends BaseEntity {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  name: string;

  @Column()
  quality: number;

  @Column()
  color: string;

  @Column()
  desc: string;

我的repository.ts

@EntityRepository(Product)
export class ProductRepository extends Repository<Product> {}

例如有人想打开products/specific,它应该只显示namedesc

这是我现在在services.ts 中的函数:

async get(productid: number): Promise<Product> {
    var product: Product= await this.productRepositroy.findOne(productid);
    return product;
  }

我应该如何修改它以仅返回选定的列?我已经阅读了 QueryBuilders,但我不知道应该如何实现它们。

【问题讨论】:

    标签: node.js database typescript nestjs typeorm


    【解决方案1】:

    您的存储库通过扩展Repository 继承自方法createQueryBuilder。因此,您可以将其与 select 一起使用,以便仅获取预期的列:

    const product = await this.productRepository
      .createQueryBuilder('p')
      .where('p.productId = :productId', { productId })
      .select(['p.name', 'p.desc']);
      .getOne();
    

    此外,Nest 还可以使用序列化程序修改您的传出对象:serialization doc。但这始终是一个好主意,只选择所需的列。

    注意:我还建议不要将您的业务逻辑(这里是处理“产品”)与您的数据库混合太多(您最好将获取产品和从数据库中获取数据的责任分开,出于可测试性/可维护性的原因)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-01
      • 2020-06-27
      • 2010-09-17
      • 1970-01-01
      • 2019-05-09
      • 2019-01-30
      相关资源
      最近更新 更多