【问题标题】:Trying to understand models in a nestjs/mongoose app试图理解 nestjs/mongoose 应用程序中的模型
【发布时间】:2020-03-11 20:44:31
【问题描述】:

我是nestjs的新手。我现在一直在玩一个非常简单的 mongodb/mongoose db,里面有书籍、作者和流派。我开始对我真正需要的模型有一个模糊的认识,比如说书籍。

目前我有 2 个型号:

book.ts

export interface Book extends Document {
  id?: string;
  name: string;
  year?: string;
  authorId: string;
  genreId: string;
}
  • 需要注入服务构造函数@InjectModel('Book') private readonly bookModel: Model<Book>并调用book.save()

CreateBookDto.ts

export class CreateBookDto {
  @IsString()
  @IsNotEmpty()
  readonly name: string;

  @IsOptional()
  @IsNumberString()
  @Min(1000)
  @Max(3000)
  readonly year: string;

  @IsMongoId()
  readonly authorId: string;

  @IsMongoId()
  readonly genreId: string;
}
  • 据我了解 - 需要在创建期间验证对象

(当然,还有另一个文件中的猫鼬模式)

现在我在尝试序列化图书响应时遇到了一个问题,我开始认为我可能需要另一个模型 - Book 类,它允许我重命名属性、排除、公开等。该类基本上可以替换接口,除了

export class Book extends mongoose.Document

好像没用。

现在,我好像误解了设计 - 我不敢相信需要在代码库中维护 3 个模型。

问题

有人能帮我解释一下吗?我可以只用一个类来满足所有目的:提供类型、验证和序列化。如果是这样,如何使.save() 部分工作?

【问题讨论】:

    标签: nestjs


    【解决方案1】:

    我在开始使用 Nest.js 时遇到了同样的问题...

    在这里我找到了这篇大文章“如何使用 Nest.js、MongoDB 和 Vue.js 构建博客” https://morioh.com/p/74ffc8a798bb ,但对于如何为猫鼬添加 Nest.js Serialization 仍然没有明确的答案。

    然后我想出了这篇文章https://medium.com/@contactsunny/hide-properties-of-mongoose-objects-in-node-js-json-responses-a5437a5dbec2,它至少阐明了一些使用 'UserSchema.methods.toJSON' 的可能方向

    【讨论】:

      【解决方案2】:

      首先,您在 MongoDB 架构中存在一些误解

      Mongoose 是一个 ODM,这意味着它是一个管理数据持久性的层,您无需直接与数据库进行通信,还为您提供了一个 API,供您在运行时处理数据。它使用基于架构的架构,这是您做错的部分,您正在创建文档而不是架构。

      其次,DTO 是一个非常好的实践,它使控制器和 ODM(Mongoose) 之间的关系松散耦合(这有助于系统的发展)。

      为了实现你想要的,你必须创建一个 Book Schema 来保存所有信息。也许你可以看到NestJS' documentation example

      【讨论】:

      • 我的代码与文档示例相同。该示例使用 Cat,它是一个接口(而不是一个类),并用作 mongoose 模型的泛型。我看不出那个答案会如何问我构建模型部分的问题。
      • 我认为您误解了示例中的实现有点混乱,该服务正在使用令牌“Cat”注入 CatSchema 模型,并且该接口用于编译代码并且您使用序列化模式和持久化模型
      猜你喜欢
      • 2020-07-16
      • 2020-06-16
      • 2020-05-25
      • 2018-10-22
      • 2020-02-26
      • 1970-01-01
      • 2016-10-15
      • 1970-01-01
      • 2013-01-09
      相关资源
      最近更新 更多