如何将 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' }