How to exclude entity field from returned by controller JSON. NestJS + Typeorm

前端 未结 7 1590
小蘑菇
小蘑菇 2020-12-06 05:26

I want to exclude password field from returned JSON. I am using NestJS and Typeorm.

The solution provided on this question doesn\'t work for me or in NestJS. I can

7条回答
  •  孤城傲影
    2020-12-06 05:46

    You can overwrite the toJSON method of the model like this.

    @Entity()
    export class User extends BaseAbstractEntity implements IUser {
      static passwordMinLength: number = 7;
    
      @ApiModelProperty({ example: faker.internet.email() })
      @IsEmail()
      @Column({ unique: true })
      email: string;
    
      @IsOptional()
      @IsString()
      @MinLength(User.passwordMinLength)
      @Exclude({ toPlainOnly: true })
      @Column({ select: false })
      password: string;
    
      @IsOptional()
      @IsString()
      @Exclude({ toPlainOnly: true })
      @Column({ select: false })
      passwordSalt: string;
    
      toJSON() {
        return classToPlain(this);
      }
    
      validatePassword(password: string) {
        if (!this.password || !this.passwordSalt) {
          return false;
        }
        return comparedToHashed(password, this.password, this.passwordSalt);
      }
    }
    

    By using the class-transformer method of plainToClass along with the @Exclude({ toPlainOnly: true }), the password will be excluded from the JSON response, but will be available in the model instance. I like this solution because it keeps all the model configuration in the entity.

提交回复
热议问题