如何将 MongoDB 文档转换为 NestJS DTO?
How do I transform a MongoDB document into a NestJS DTO?
我有一个读取和写入 MongoDB 实例的数据层。我只想处理该层的 MongoDB 文档,而不是将该实现公开给我的服务。
现在我正在做类似的事情:
// users.repository.ts
...
async getUserById(id: string): Promise<UserDto> {
const user = await this.model.findOne({ _id: id }).exec();
return this.transformToDto(user);
}
private transformToDto(user: UserDocument): UserDto {
return {
id: user._id,
...etc
}
}
...
这似乎过于冗长,必须有一种更简单的方法来实现这一点,而无需向每个存储库添加帮助器。
有没有更简洁的方法来实现这一点?
您可以为此使用 class-transformer,并且不需要使用额外的辅助方法,它可以立即 returned。
import { plainToClass } from 'class-transformer';
class UserDto {
id: string;
email: string;
role: string;
}
class Service {
async getUserById(id: string): Promise<UserDto> {
const user = await this.model.findOne({ _id: id }).exec();
return plainToClass(UserDto, user);
}
}
它将return转换为UserDto
的值
UserDto { id: 'U-111', email: 'U-111@email', role: 'user' }
我有一个读取和写入 MongoDB 实例的数据层。我只想处理该层的 MongoDB 文档,而不是将该实现公开给我的服务。
现在我正在做类似的事情:
// users.repository.ts
...
async getUserById(id: string): Promise<UserDto> {
const user = await this.model.findOne({ _id: id }).exec();
return this.transformToDto(user);
}
private transformToDto(user: UserDocument): UserDto {
return {
id: user._id,
...etc
}
}
...
这似乎过于冗长,必须有一种更简单的方法来实现这一点,而无需向每个存储库添加帮助器。
有没有更简洁的方法来实现这一点?
您可以为此使用 class-transformer,并且不需要使用额外的辅助方法,它可以立即 returned。
import { plainToClass } from 'class-transformer';
class UserDto {
id: string;
email: string;
role: string;
}
class Service {
async getUserById(id: string): Promise<UserDto> {
const user = await this.model.findOne({ _id: id }).exec();
return plainToClass(UserDto, user);
}
}
它将return转换为UserDto
UserDto { id: 'U-111', email: 'U-111@email', role: 'user' }