TypeORM @AfterLoad() 应用

@AfterLoad() 是一个 TypeORM(TypeScript ORM)注解,用于在从数据库中加载实体之后自动执行方法。通过在实体类的方法上添加 @AfterLoad() 注解,可以在从数据库中加载实体之后自动调用该方法。

下面是一个使用 @AfterLoad() 进行身份证号脱敏的例子:

import { Entity, Column, PrimaryGeneratedColumn, AfterLoad } from 'typeorm';

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

  @Column()
  name: string;

  @Column()
  idCardNumber: string;

  @AfterLoad()
  maskIdCardNumber() {
    if (this.idCardNumber) {
      const length = this.idCardNumber.length;
      if (length > 8) {
        const masked = this.idCardNumber.substring(0, length - 8)
          + '********'
          + this.idCardNumber.substring(length - 4);
        this.idCardNumber = masked;
      }
    }
  }
}

output

  idCardNumber: '4225791994********3225',

在上面的例子中,User 实体类有一个 idCardNumber 属性,表示用户的身份证号。在 maskIdCardNumber() 方法中,我们使用 substring() 方法将身份证号的前面几位和后面几位保留,中间用 8 个星号代替,从而实现身份证号脱敏的效果。

当 TypeORM 从数据库中加载 User 实体时,会自动调用 maskIdCardNumber() 方法,将身份证号脱敏后的值保存到 idCardNumber 属性中。这样,我们就可以在代码中使用脱敏后的身份证号,而无需手动处理。