我想使用TypeORM创建一个NestJS API,并希望将数据库用户映射到要发送到客户端的响应模型。我的UserEntity仅包含一些基本信息
@Entity('User')
export class UserEntity {
@PrimaryGeneratedColumn()
id: number;
@Column()
username: string;
@Column()
passwordHash: string;
@Column()
passwordSalt: string;
}
但是显然我无法将密码信息发送回客户端。我创建了一个仅包含相关信息的响应对象
export interface UserRO {
id: number;
username: string;
}
在调用GET / users时,我希望有一组UserRO。所以我去了
public async find(): Promise<UserRO[]> {
return this.usersRepository.find(); // returning a list of UserEntities
}
不幸的是,没有映射,因此响应对象仍然包含密码信息。我用这段代码证明了这一点
public async find(): Promise<UserRO[]> {
const dbUsers: UserEntity[] = await this.usersRepository.find();
const roUsers: UserRO[] = dbUsers;
console.log(dbUsers);
console.log(roUsers); // still holding the password information
return roUsers;
}
我还使用地图功能添加了快速修复
public async find(): Promise<UserRO[]> {
const dbUsers: UserEntity[] = await this.usersRepository.find();
const roUsers: UserRO[] = dbUsers.map((dbUser: UserEntity) => {
return {
id: dbUser.id,
username: dbUser.username,
};
});
console.log(dbUsers);
console.log(roUsers); // not holding the password information anymore
return roUsers;
}
我的问题是:我真的必须手动执行此操作吗?我希望TypeScript删除或忽略所有“未知”键,而仅从匹配键中获取值。