是否可以在响应主体上使用带有白名单的 ValidationPipe?

Is it possible to use the ValidationPipe with whiteList on response body?

我想防止在 NestJs 服务器的响应中返回对象键值(并在示例中使用 TypeOrm 实体)

例如,我想确保永远不会将用户密码发送给任何客户端:

user.entity.ts:

@Entity()
export class User extends BaseEntity {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  password: string;
}

user.controller.ts:

  @Get('')
  getAllUsers(): Promise<User[]> {
      return this.userService.getAll(); // expected: [{id: 1}], actual: [{id: 1, password: '1234'}]
  }

I 可以通过使用 class-validator 管道为请求体实现:

  new ValidationPipe({
      whitelist: true
  })

user.dto.ts:

export class UserDto {
  @Allow()
  id: number;

  password: string;
}

ValidationPipe 可以过滤那种类型的密钥吗? 还有其他优雅的解决方案吗?

AFIK ValidationPipe 用于验证 传入的 请求。

您应该定义一个 serialization interceptor 以正确删除您不想 return 的键。使用此设置,您无需验证 该 DTO。