Я хотел бы создать API NestJS с TypeORM и сопоставить пользователя базы данных с моделью ответа, отправляемой клиенту. Моя 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 удалит или проигнорирует все «неизвестные» ключи и получит значения только из соответствующих ключей.