<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ## Mongoose > 在本文中,您將學習如何使用自定義提供者機制從零開始創建基于 **Mongoose** 包的 `DatabaseModule`。由于該解決方案包含許多開銷,因此您可以使用開箱即用的 `@nestjs/mongoose` 軟件包。要了解更多信息,請參閱 [此處](https://docs.nestjs.com/techniques/mongodb)。 [Mongoose](http://mongoosejs.com/) 是最受歡迎的[MongoDB](https://www.mongodb.org/) 對象建模工具。 ### 入門 在開始使用這個庫前,我們必須安裝所有必需的依賴關系 ```bash $ npm install --save mongoose $ npm install --save-dev @types/mongoose ``` 我們需要做的第一步是使用 `connect()` 函數建立與數據庫的連接。`connect()` 函數返回一個 `Promise`,因此我們必須創建一個 [異步提供者](/8/fundamentals.md?id=異步提供者 (Asynchronous providers))。 > database.providers.ts ```typescript import * as mongoose from 'mongoose'; export const databaseProviders = [ { provide: 'DATABASE_CONNECTION', useFactory: (): Promise<typeof mongoose> => mongoose.connect('mongodb://localhost/nest'), }, ]; ``` > 按照最佳實踐,我們在分離的文件中聲明了自定義提供者,該文件帶有 `*.providers.ts` 后綴。 然后,我們需要導出這些提供者,以便應用程序的其余部分可以 **訪問** 它們。 > database.module.ts ```typescript import { Module } from '@nestjs/common'; import { databaseProviders } from './database.providers'; @Module({ providers: [...databaseProviders], exports: [...databaseProviders], }) export class DatabaseModule {} ``` 現在我們可以使用 `@Inject()` 裝飾器注入 `Connection` 對象。依賴于 `Connection` 異步提供者的每個類都將等待 `Promise` 被解析。 ### 模型注入 使用Mongoose,一切都來自[Schema](https://mongoosejs.com/docs/guide.html)。 讓我們定義 `CatSchema` : > schemas/cats.schema.ts ```typescript import * as mongoose from 'mongoose'; export const CatSchema = new mongoose.Schema({ name: String, age: Number, breed: String, }); ``` `CatsSchema` 屬于 `cats` 目錄。此目錄代表 `CatsModule` 。 現在,讓我們創建一個 **模型** 提供者: > cats.providers.ts ```typescript import { Connection } from 'mongoose'; import { CatSchema } from './schemas/cat.schema'; export const catsProviders = [ { provide: 'CAT_MODEL', useFactory: (connection: Connection) => connection.model('Cat', CatSchema), inject: ['DATABASE_CONNECTION'], }, ]; ``` > 請注意,在實際應用程序中,您應該避免使用魔術字符串。`CAT_MODEL` 和 `DATABASE_CONNECTION` 都應保存在分離的 `constants.ts` 文件中。 現在我們可以使用 `@Inject()` 裝飾器將 `CAT_MODEL` 注入到 `CatsService` 中: > cats.service.ts ```typescript import { Model } from 'mongoose'; import { Injectable, Inject } from '@nestjs/common'; import { Cat } from './interfaces/cat.interface'; import { CreateCatDto } from './dto/create-cat.dto'; @Injectable() export class CatsService { constructor( @Inject('CAT_MODEL') private catModel: Model<Cat>, ) {} async create(createCatDto: CreateCatDto): Promise<Cat> { const createdCat = new this.catModel(createCatDto); return createdCat.save(); } async findAll(): Promise<Cat[]> { return this.catModel.find().exec(); } } ``` 在上面的例子中,我們使用了 `Cat` 接口。 此接口擴展了來自 `mongoose` 包的 `Document` : ```typescript import { Document } from 'mongoose'; export interface Cat extends Document { readonly name: string; readonly age: number; readonly breed: string; } ``` 數據庫連接是 **異步的**,但 `Nest` 使最終用戶完全看不到這個過程。`CatModel` 正在等待數據庫連接時,并且`CatsService` 會被延遲,直到存儲庫可以使用。整個應用程序可以在每個類實例化時啟動。 這是一個最終的 `CatsModule` : > cats.module.ts ```typescript import { Module } from '@nestjs/common'; import { CatsController } from './cats.controller'; import { CatsService } from './cats.service'; import { catsProviders } from './cats.providers'; import { DatabaseModule } from '../database/database.module'; @Module({ imports: [DatabaseModule], controllers: [CatsController], providers: [ CatsService, ...catsProviders, ], }) export class CatsModule {} ``` > 不要忘記將 `CatsModule` 導入到根 `ApplicationModule` 中。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看