【问题标题】:how to exclude required entities from a response in TypeORM with NestJS如何使用 NestJS 从 TypeORM 中的响应中排除所需的实体
【发布时间】:2022-01-07 09:24:57
【问题描述】:

我有一个实体

@Column()
name: string;

@IsEmail()
email: string;

@Column({ select: false })
autogeneratedCode: string;

我只在预期的 GET 请求响应中获取名称和字符串。

但是当我用 body 访问我的 POST Api 时,它也会返回 nameemailautogeneratedCode

我需要在所有 CRUD 响应中隐藏自动生成代码。

有没有办法做到这一点?还是我在这里遗漏了什么?

【问题讨论】:

  • 我试过了,它不适用于@Post()
  • 您是否像示例中那样将构造函数添加到您的实体中。将实体保存到数据库后,您必须使用构造函数创建一个新对象以排除 @Exclude() 属性。例如:返回新用户(this.userRepository.save(entity));`。刚刚添加了一个更充实的示例的答案。

标签: javascript typescript nestjs typeorm


【解决方案1】:

你可以使用'class-transformer'中的@Exclude()

示例

import { Exclude } from 'class-transformer';

@Entity()
export class User {
  @Column()
  name: string;

  @IsEmail()
  email: string;

  @Column({ select: false })
  @Exclude()
  autogeneratedCode: string;

  constructor(entity: Partial<User>) {
    Object.assign(this, entity);
  }
}

然后您可以使用构造函数创建一个不包括@Exclude() 属性的新对象。

export class UserService {
  constructor(
    @InjectRepository(User)
    private userRepository: Repository<User>
  ) {}

  public async createUser(user: User): Promise<User> {
    return new User(
      await this.userRepository.save(user)
    );
  }
}

NestJS 序列化文档

https://docs.nestjs.com/techniques/serialization#exclude-properties

【讨论】:

    猜你喜欢
    • 2018-10-25
    • 2023-02-13
    • 1970-01-01
    • 2019-06-17
    • 2021-03-06
    • 1970-01-01
    • 2019-06-04
    • 2021-06-05
    • 2020-09-18
    相关资源
    最近更新 更多