Nest JS Rest API показывает только некоторые столбцы из базы данных, используя TypeORM - PullRequest
0 голосов
/ 11 апреля 2020

Я хотел бы показать только некоторые из столбцов в Entity, используя Nest JS и TypeORM. Это мои столбцы в Entity:

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

  @Column()
  name: string;

  @Column()
  quality: number;

  @Column()
  color: string;

  @Column()
  desc: string;

My repository.ts:

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

Например, если кто-то хочет открыть products/specific, он должен показывать только имя и des c.

Это моя функция в services.ts сейчас:

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

Как мне изменить его, чтобы он возвращал только выбранный Колонны? Я читал о QueryBuilders, но понятия не имею, как мне их реализовать.

1 Ответ

1 голос
/ 11 апреля 2020

Ваш репозиторий унаследовал от метода createQueryBuilder путем расширения Repository. Таким образом, вы можете использовать его с select, чтобы получить только ожидаемые столбцы:

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

Кроме того, Nest может изменять исходящие объекты с помощью сериализатора: сериализация до c. Но это всегда хорошая идея, чтобы выбрать только необходимые столбцы.

Примечание: я бы также советовал не смешивать бизнес-логику c (здесь, обработку "продуктов") с вашей базой данных тоже много (вам лучше разделить ответственность за получение продукта и выборку данных из базы данных для удобства тестирования / обслуживания).

...