在本文中,您将学习如何基于 Mongoose 包从头开始使用自定义组件创建 DatabaseModule。因此,该解决方案包含许多额外工作,您可以直接使用现成的专用 @nestjs/mongoose 包来避免这些操作。了解更多信息,请参阅此处 。
Mongoose 是最受欢迎的 MongoDB 对象建模工具。
要开始使用这个库,我们需要先安装所有必需的依赖项:
我们首先需要使用 connect() 函数建立与数据库的连接。connect() 函数返回一个 Promise,因此我们必须创建一个异步提供者 。
遵循最佳实践,我们在单独的文件中声明了自定义提供者,该文件具有 *.providers.ts 后缀。
接下来,我们需要导出这些提供者,使它们对应用程序的其余部分可访问 。
现在我们可以使用 @Inject() 装饰器注入 Connection 对象。每个依赖于 Connection 异步提供者的类都将等待 Promise 解析完成。
在 Mongoose 中,所有内容都源自 Schema。让我们定义 CatSchema:
CatsSchema 属于 cats 目录。该目录代表 CatsModule。
现在是时候创建一个 Model 提供者了:
在实际应用中应避免使用魔法字符串 。CAT_MODEL 和 DATABASE_CONNECTION 都应保存在独立的 constants.ts 文件中。
现在我们可以通过 @Inject() 装饰器将 CAT_MODEL 注入到 CatsService 中:
在上例中我们使用了 Cat 接口。该接口扩展了 mongoose 包中的 Document:
数据库连接是异步的 ,但 Nest 使这个过程对终端用户完全透明。CatModel 类会等待数据库连接,而 CatsService 会延迟到模型准备就绪。整个应用会在所有类实例化完成后启动。
以下是最终的 CatsModule:
不要忘记将 CatsModule 导入根模块 AppModule。
一个可用的示例在此处查看。