尝试了解nestjs / mongoose应用中的模型

时间:2019-11-15 16:47:06

标签: nestjs

我是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()部分起作用?

2 个答案:

答案 0 :(得分:0)

首先,您对MongoDB的体系结构有一些误解,当您从Mongo的商店获取注册表时,文档是数据库中的注册不是模型。

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

第二个DTO是一个非常好的实践,它使控制器和ODM(猫鼬)之间的关系松耦合(这有助于系统的增长)。

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

答案 1 :(得分:0)

开始使用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'的可能方向